【问题标题】:Call Button clickListener of activity from fragment?从片段中调用活动的按钮clickListener?
【发布时间】:2015-12-09 11:48:48
【问题描述】:

我的活动中有一个包含片段的按钮。从我需要调用按钮的片段之一,按钮 clickListener 并将带有附加功能的意图传递给另一个活动。我怎样才能做到这一点?我为此搜索了很多,但找不到合适的解决方案。

【问题讨论】:

  • 我想在我的活动中访问按钮,以通过我的片段中的额外内容传递意图。
  • 好的等等。我正在尝试这些答案。谢谢

标签: android android-fragments onclicklistener


【解决方案1】:

为activity中的按钮实现onClickListener:

button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
    // get the fragment from the fragment manager
    Fragment frag = getFragmentManager().findFragmentByTag("FRAGMENT TAG");
    Bundle extras = frag.getExtrasForNewActivity();

    /// Your code here this is for Activity
    Intent intent=new Intent(getActivity(),Second.class);
    intent.putExtras(extras);
    startActivity(intent);
 }
});

并在片段中创建一个方法,如下所示:

public Bundle getExtrasForNewActivity()
{
    /// return a bundle with values
}

【讨论】:

    【解决方案2】:

    您可以通过界面联系您的活动:

    • 首先,在你的 Fragment 内部:

      public interface ButtonCallback {
      
          //You can add parameters if you need it
      
          void launchAction();
      }
      
      //And when you want comunicate with Activity, launch call
      ((ButtonCallback ) getActivity()).launchAction();
      
    • 然后,您的 Activity 必须实现 YourFragment.ButtonCallback,并覆盖您从片段中听到调用的方法:

      Activity implements YourFragment.ButtonCallback{
      
         @Override
         public void launchAction() {
             //Todo
             //Your intent with extras...
         }
      
      }
      

    问候

    【讨论】:

      【解决方案3】:

      您也可以在片段类中编写 onclicklistener。 从您的活动中获取按钮对象并在您的片段类 onActivityCreated 方法中设置 onclick ,如下所示...

      Button button = (Button)getActivity().findViewById(R.id.button1);
      
      button .setOnClickListener(new View.OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  /// Your code here
              }
          });
      

      【讨论】:

      • 这是一个不好的做法,因为这会降低这个片段的可重用性,因为它总是希望它的父活动有一个 id 为“button1”的按钮
      • @Rishabh 这取决于需求,如果片段仅用于单个父活动,这种方式对于初学者来说是最短和简单的代码
      猜你喜欢
      • 2016-08-17
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      相关资源
      最近更新 更多