我正在实现一个具有不同组的信使,我创建了一个片段及其相关的布局,我想为不同的组重用它。
我正在使用DrawerList视图来选择不同的片段。 我创建了一个包含不同组的Fragment数组,第一次实例化所有片段并将它们隐藏到FragmentManager中。这可能不是最优雅的,如果你有更好的主意,请不要犹豫。
我可以显示我想要的不同视图,并填充相应的列表视图。
FragmentMessengers包含一个发布按钮,我的问题是这个事件只对我实例化的2个片段之一起作用(未触发)。 我试图取消注册,然后通过方法update()/ removeListener()注册事件,但我有相同的结果。
如何管理这些听众?
以下是一些片段:
片段信使的初始化:
private static Fragment[] mFragmentMessengers;
选择:
if (mFragmentMessengers == null){
mFragmentMessengers = new MessageListFragment[topicKeys.length];
for (int i=0; i<topicKeys.length;i++){
mFragmentMessengers[i] = new MessageListFragment();
Bundle data = new Bundle();
data.putString(MessageListFragment.TOPIC_NAME, mTopics[i]);
mFragmentMessengers[i].setArguments(data);
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.add(R.id.content_frame, mFragmentMessengers[i],"MESS_"+i);
ft.hide(mFragmentMessengers[i]);
ft.commit();
}
}
// Test previousPosition
Fragment mlf = mFragmentMessengers[previousPos];
((MessageListFragment)mlf).removeListener();
fragmentManager.beginTransaction().hide(mlf).commit();
Fragment mlf = mFragmentMessengers[pos];
((MessageListFragment)mlf).update();
fragmentManager.beginTransaction().show(mlf).commit();
MessageListFragment:
public class MessageListFragment extends ListFragment implements OnEditorActionListener {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
EditText editText = (EditText) getActivity().findViewById(R.id.publishMessage);
editText.setOnEditorActionListener(this);
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.d(TAG,"onEditorAction "+actionId + " topic_name "+topic_name);
return true;
}
public void update()
{
Log.d(TAG,"update "+topic_name);
try
{
EditText editText = (EditText) getActivity().findViewById(R.id.publishMessage);
if (editText != null)
{
editText.setOnEditorActionListener(this);
}
}catch(Exception e){
Log.d(TAG,"update Exception");
}
}
public void removeListener()
{
Log.d(TAG,"removeListener "+topic_name);
try
{
EditText editText = (EditText) getActivity().findViewById(R.id.publishMessage);
if (editText != null)
editText.setOnEditorActionListener(null);
}catch(Exception e){
Log.d(TAG,"update Exception");
}
}
}