如何在Activity中而不是RecyclerView Adapter类中实现onClick方法?

时间:2019-02-13 17:18:32

标签: java android

我试图允许用户单击我的任何RecyclerView项目,然后突出显示该项目,将其添加到数组列表中,然后将该列表用于改造后请求中。

我了解如何在Adapter类中实现onClick方法,但是我无法使用附加到该列表的列表,因为它是在我的适配器类中初始化的。如何在Activity类中实现此功能?

需要使用代码示例的详细说明。谢谢!

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您可能想看看this免费使用复制粘贴类。它在Activity内设置了OnItemClickListener。使用此代码进行设置:

RecycerView recyclerView = findViewById(R.id.recyclerView);   
ItemClickSupport.addTo(recyclerView).setOnItemClickListener(new ItemClickSupport.OnItemClickListener( { 
    @Override 
    public void onItemClicked(RecyclerView recyclerView, int position, View { 
        //Code goes here
    } 
}); 

我希望这是您想要的。

答案 1 :(得分:0)

我已经找到了解决自己问题的方法。代码如下。

我想获得被单击的联系人(每个列表视图项目的数据类型),以便能够处理活动类而不是适配器类中的数据。

我创建了一个如下界面

public interface ItemClickListener {
    void onItemClick(Contact contact);
}

在我的RecyclerViewAdapter类中,我创建了以下构造函数和局部变量:

private static ItemClickListener onItemClick;

public RecyclerViewAdapter(List<Contact> contactList, int itemLayout, Context context) {
    this.contactList = contactList;
    this.itemLayout = itemLayout;
    this.context = context;
}

然后在onBindViewHodler方法中,将setOnClickListener分配给列表项的根布局(在本例中为LinearLayout):

@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {
    final Contact contact = contactList.get(position);
    viewHolder.contactName.setText(contact.getFullName());
    viewHolder.contactImage.setBackgroundResource(R.drawable.human_photo);
    viewHolder.viewLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClick.onItemClick(contactList.get(position));
        }
    });
}

现在,在Activity类中,创建一些全局变量,然后在onCreate方法中,设置RecyclerView:

private CreateGroupAccountStage2RVAdapter adapter;
private RecyclerView contactsRecyclerView;
private RecyclerView.LayoutManager contactsRecyclerViewLayoutManager;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_select_contacts);

    //Set up recyclerview with dummy data
    ArrayList<Contact> contactList = new ArrayList<>();
    contactList.add(new Contact("FN1", "LN1", "12345"));
    contactList.add(new Contact("FN2", "LN2", "23456"));

    contactsRecyclerView = (RecyclerView) findViewById(R.id.contactsRV);
    contactsRecyclerViewLayoutManager = new LinearLayoutManager(this);
    contactsRecyclerView.setLayoutManager(contactsRecyclerViewLayoutManager);
    adapter = new RecyclerViewAdapter(contactList, R.layout.contact_list_item, this);
    contactsRecyclerView.setAdapter(adapter);
    adapter.setOnClick(ThisActivity.this);
}

我希望这可以帮助陷入困境的其他人!