[英]Android Fragment class variables not available from onOptionsItemSelected() method
[英]Android Calling a Class from Within onOptionsItemSelected
为菜鸟问题道歉。 我有一个操作栏按钮,可将片段注入主要活动。 当代码位于onOptionsItemSelected块中时,它可以正常工作,如下所示:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent;
switch (item.getItemId()) {
case R.id.action_chat:
Log.v("Click", "Chat button");
RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main_layout);
LinearLayout ll = new LinearLayout(this);
ll.setId(999);
getFragmentManager().beginTransaction().add(ll.getId(), ChatFragment.newInstance()).commit();
mainLayout.addView(ll);
break;
case R.id.action_settings:
intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
break;
}
return super.onOptionsItemSelected(item);
}
但是我试图让一个外部类来处理片段插入(因为这也需要其他活动使用)。 所以我这样称呼它:
case R.id.action_chat:
ChatHandler chatHandler = new ChatHandler();
chatHandler.goChat(View view);
break;
在ChatHandler类上:
public class ChatHandler {
public void goChat(View view) {
Log.v("GoChat", "Start");
RelativeLayout mainLayout = (RelativeLayout) view.findViewById(R.id.main_layout);
LinearLayout ll = new LinearLayout(this);
ll.setId(999);
getFragmentManager().beginTransaction().add(ll.getId(), ChatFragment.newInstance()).commit();
mainLayout.addView(ll);
}
}
我的问题是我需要在主活动goChat(View?view?)中传递哪些参数,以及如何从ChatHandler类引用主活动,如LinearLayout ll = new LinearLayout(this)中的this所示。
谢谢!
将您的代码更改为此
public void goChat(Context context)
{
Log.v("GoChat", "Start");
RelativeLayout mainLayout = (RelativeLayout) ((Activity)context).findViewById(R.id.main_layout);
LinearLayout ll = new LinearLayout(context);
ll.setId(999);
getFragmentManager().beginTransaction().add(ll.getId(), ChatFragment.newInstance()).commit();
mainLayout.addView(ll);
}
您应该将活动作为goChat
方法的参数传递
case R.id.action_chat:
ChatHandler chatHandler = new ChatHandler();
chatHandler.goChat(this);
break;
然后在该课程中:
public void goChat(Activity activity) {
Log.v("GoChat", "Start");
RelativeLayout mainLayout = (RelativeLayout) activity.findViewById(R.id.main_layout);
LinearLayout ll = new LinearLayout(activity);
ll.setId(999);
activity.getFragmentManager().beginTransaction().add(ll.getId(), ChatFragment.newInstance()).commit();
mainLayout.addView(ll);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.