package com.tencent.tws.pluginhost.plugindebug; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.Toast; import com.tencent.tws.pluginhost.R; import com.tws.plugin.core.PluginLoader; import com.tws.plugin.core.annotation.PluginContainer; /** * 一个非常普通的FragmentActivty, 用来展示一个来自插件中的fragment。 * 这里需要通过注解@FragmentContainer来通知插件框架,此activity要展示 * 的fragment来自那个插件,从而提前更换当前Activity的Context为插件Context * * @author yongchen * */ public class PluginFragmentActivity extends Activity implements PluginContainer { public static final String FRAGMENT_ID_IN_PLUGIN = "PluginDispatcher.fragmentId"; private static final String LOG_TAG = PluginFragmentActivity.class.getSimpleName(); static final String FRAGMENTS_TAG = "android:fragments"; private String mPluginID = ""; private String mFragmentID = ""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_plugin_fragment); mPluginID = getIntent().getStringExtra(FRAGMENT_PLUGIN_ID); String classId = getIntent().getStringExtra(FRAGMENT_ID_IN_PLUGIN); if (classId == null && savedInstanceState != null) { classId = savedInstanceState.getString(FRAGMENT_ID_IN_PLUGIN); } loadPluginFragment(classId); } @Override public void setPluginId(String id) { mPluginID = id; } @Override public String getPluginId() { return mPluginID; } private void loadPluginFragment(String classId) { try { if (classId == null) { Toast.makeText(this, "缺少参数:PluginDispatcher.fragmentId", Toast.LENGTH_SHORT).show(); return; } Log.d(LOG_TAG, "loadPluginFragment, classId is " + classId); @SuppressWarnings("rawtypes") Class clazz = PluginLoader.loadPluginFragmentClassById(classId); if (clazz != null) { Fragment fragment = (Fragment) clazz.newInstance(); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, fragment).commit(); } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (outState != null) { outState.remove(FRAGMENTS_TAG); if (!TextUtils.isEmpty(mFragmentID)) { outState.putString(FRAGMENT_ID_IN_PLUGIN, mFragmentID); } } } }