繁体   English   中英

Android从onOptionsItemSelected内部调用类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM