首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android适配器中调用片段中的方法

如何在Android适配器中调用片段中的方法
EN

Stack Overflow用户
提问于 2016-04-01 11:19:00
回答 3查看 30.1K关注 0票数 6

我需要帮助,所以我有一个片段,它有一个RecycleView,在RecycleView里面有一个按钮。

单击后的按钮必须打开已经在基本片段中声明的对话框,所以我只调用like openDialog(DIALOG_CHECK);

现在如何在适配器上调用该对话框我已经在片段中创建了一个方法,并从适配器中调用它,并生成错误"Java lang null pointer“

这是我的代码:

代码语言:javascript
复制
DeliveryFragment delivFrag = new DeliveryFragment();
holder.editButton.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         delivFrag.doEdit();
     }
});

并在片段中

代码语言:javascript
复制
public void doEdit(){
   openDialog(DIALOG_EDIT_ITEM);
}
EN

回答 3

Stack Overflow用户

发布于 2016-04-01 13:18:32

为了更好地理解,这只是一个简单的例子。使用接口。

代码语言:javascript
复制
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> {    
  private static OnItemClickListener mOnItemClickLister;

  public interface OnItemClickListener {
    void onItemClicked(View view, int pos);
  }

  public void setOnItemClickListener(OnItemClickListener listener) {    
    mOnItemClickLister = listener;
  }

  public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {    
    Button mBtnTest;
    Context mContext;

    //We also create a constructor that accepts the entire item row
    //and does the view lookups to find each subview.
    public ViewHolder(Context context, View itemView) {    
      //Stores the itemView in a public final member variable that can be used
      //to access the context from any ViewHolder Instance
      super(itemView);    
      mContext = context;
      mBtnTest = (Button) itemView.findViewById(R.id.message_button);
      itemView.setOnClickListener(this);
    }

    @Override public void onClick(View v) {
      int position = v.getLayoutDirection();
      mOnItemClickLister.onItemClicked(v, position);
    }
  }
}   

片段部分

代码语言:javascript
复制
class FragmentTest extends Fragment implements OnItemClickListener {    
  TestAdapter adapter = new TestAdapter(); //you can initialize according to  your logic

  //set the fragment as a listener to adapter
  this.adapter.setOnItemClickListener(onItemClickListener);

  public void onItemClicked(View view, int pos) {
    //do whatever you want here...
  }
}
票数 9
EN

Stack Overflow用户

发布于 2016-04-01 12:51:50

您必须在adapter类中编写一个接口,并在调用适配器的片段中实现该功能。

以下是带有项目单击操作的回收器视图的示例应用程序。检查一次,它可能会对你有用。https://www.dropbox.com/s/2q1ywnehz454axw/SamplePro_Recycler.zip?dl=0

票数 0
EN

Stack Overflow用户

发布于 2016-10-12 15:17:52

您可以将片段实例发送到Adapter的构造函数,然后可以使用此实例调用该片段中的方法。

代码语言:javascript
复制
public MyCartRecycleAdapter(Context context, List<CartData> list, MyFragmentNew myFragmentNew) {
    this.list = list;
    this.mContext = (Activity) context;
    this.myFragmentNew = myFragmentNew;
}

然后

代码语言:javascript
复制
myFragmentNew.MethodName();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36347429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档