【问题标题】:onClick to call interface method from MainActivityonClick 从 MainActivity 调用接口方法
【发布时间】:2015-07-24 04:31:48
【问题描述】:

我需要执行onClick来调用另一个类的onItemSelected监听器方法。我不知道如何在Image按钮onClick监听器中调用该方法。所以它会移动到HomeFirstFragment类。

ItmeSelectedListener

public interface ItemSelectedListener {

    public void onItemSelected(final int position, final String content);
}

LayoutActivity.java:

public class LayoutActivity extends Activity implements OnClickListener {

ImageButton btn_click;

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grid3);

        btn_click = (ImageButton) findViewById(R.id.btn_click);

   }
    @Override
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.btn_click:


             break;
        }
    }

}

MainActivity.java:

public class MainActivity extends ActionBarActivity implements OnTabChangeListener,ItemSelectedListener {

 private TextView action_bar_hometext;


 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

}

 @Override
    public void onItemSelected(int position, String content)
    {

        if(position==0)
        {
            action_bar_hometext.setText(content);
            FragmentManager manager = getSupportFragmentManager();
            FragmentTransaction ft = manager.beginTransaction();
            HomeFirstFragment newFragment = new HomeFirstFragment();
            ft.replace(R.id.realtabcontent, newFragment);
            ft.addToBackStack(null);
            ft.commit();
        }
     }

如果我点击LayoutActivity类中的btn_click,我需要执行onClick来调用MainActivity的接口方法。

任何人都可以帮助我。谢谢。

【问题讨论】:

    标签: java android interface


    【解决方案1】:

    您可以创建自己的侦听器,并在您自己的侦听器中添加要在单击时执行的代码块。

    像这样创建你的界面

    Interface MyListener{
        public void myClickListener(String content);
    }
    

    现在在你的 MainActivity 中实现它

    public class MainActivity extends ActionBarActivity implements OnTabChangeListener,ItemSelectedListener,MyListener {
        public void myClickListener(String content){
            action_bar_hometext.setText(content);
            FragmentManager manager = getSupportFragmentManager();
            FragmentTransaction ft = manager.beginTransaction();
            HomeFirstFragment newFragment = new HomeFirstFragment();
            ft.replace(R.id.realtabcontent, newFragment);
            ft.addToBackStack(null);
            ft.commit();
        }
    }
    

    【讨论】:

    • 请再检查一次我的问题。我需要在 LayoutActivity 中调用监听器。到目前为止我尝试过这样的事情。 ItemSelectedListener list; case R.id. btn_flight: list.onItemSelected(0, "Flight Details"); break; 但它对我不起作用。
    【解决方案2】:

    你需要在LayoutActivity类中注册你的MainActivity类,这样LayoutActivity类才能调用接口的方法。

    将此添加到您的LayoutActivity.java

    private static ItemSelectedListener mListener = null;
    
    public static void register(ItemSelectedListener listener){
        mListener = listener;
    }
    
    @Override
    public void onClick(View v) {
    
        switch (v.getId()) {
    
            case R.id.btn_click:
                if(mListener!=null){
                    // ADD THIS LINE
                    mListener.onItemSelected(POS/*Your position*/, CONTENT/*Your content*/);
                }
    
             break;
        }
    }
    

    现在,在您的 MainActivity 类中,将其注册到 LayoutActivity 类并执行以下操作:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LayoutActivity.register(this);
    }
    

    希望对您有所帮助! :)

    【讨论】:

    • 当我点击图片按钮时它不起作用。但运行时没有错误
    • 添加适当的日志。您的 MainActivity 可能根本没有创建,所以它不会注册。在所有接口相关部分添加日志语句。此外,除了让它工作之外,我希望您了解接口是如何工作的以及如何使用的。 :)
    • 我不想要日志。我希望您添加更多日志语句并跟踪问题。我已经测试了这段代码,它可以工作。
    • 如果 mListener 为 null 则为 null,这意味着您在调用 MainActivity 之前正在运行 LayoutActivity..此代码应该可以工作
    • @Richard 我认为您的 MainActivity 甚至都没有创建!你能告诉我你试图实现的事件顺序吗?比如你的应用如何启动以及它应该做什么。
    猜你喜欢
    • 2016-08-12
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多