RecyclerView onItemClicked回调 [英] RecyclerView onItemClicked callback
问题描述
我正在使用此教程,但我不想应用整个教程,我只想处理用户的点击.我已经在MyAdapter
类的ViewHolder
内部实现了onClickListener
:
I am implementing a Navigation Drawer with a RecyclerView, using this tutorial, but I don't want to apply the whole tutorial, I just want to handle the user's click. I've implemented the onClickListener
inside the ViewHolder
of my MyAdapter
class:
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{
int Holderid; ImageView imageView, profile;
TextView textView, Name, email, drawerTitle;
private ClickListener listener;
// ViewHolder Constructor with View and viewType as a parameter
public ViewHolder(View itemView, int ViewType, ClickListener listener) {
super(itemView);
if (ViewType == TYPE_HEADER){
itemView.setClickable(false);
Name = (TextView) itemView.findViewById(R.id.user_name);
email = (TextView) itemView.findViewById(R.id.user_email);
profile = (ImageView) itemView.findViewById(R.id.circleView);
Holderid = 0;
}
if(ViewType == TYPE_ITEM) {
itemView.setClickable(true);
textView = (TextView) itemView.findViewById(R.id.rowText);
imageView = (ImageView) itemView.findViewById(R.id.rowIcon);
Holderid = 1;
// Handle item click and set the selection
}
if(ViewType == TYPE_SEPARATOR){
itemView.setClickable(false);
drawerTitle = (TextView) itemView.findViewById(R.id.drawerTitle);
Holderid = 2;
}
this.listener = listener;
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
int pos;
@Override
public void onClick(View v) {
if (listener != null) {
listener.onItemClicked(getPosition());
pos= getPosition();
Log.d("TAG", "Item clicked at position " + getPosition());
}
}
@Override
public boolean onLongClick(View v) {
if (listener != null) {
return listener.onItemLongClicked(getPosition());
}
return false;
}
public interface ClickListener {
public void onItemClicked(int position);
public boolean onItemLongClicked(int position);
}
}
我不明白的是如何将ClickListener
应用于MyAdapter
对象:
What I can't understand is how to apply a ClickListener
to the MyAdapter
object:
mAdapter = new MyAdapter(dataList, mSelectedPositions, ...?);
以便用户单击一个项目时,我可以处理用户对MainActivity
的单击.
so that when the user clicks on one item, I can handle the user's click back on the MainActivity
.
我已经按照这种方式创建了适配器(如本教程所述):
I've created the Adapter this way (as outlined in the tutorial):
整个MyAdapter
类: http://pastie.org/private/cibcsj3zieorlkcgh2rm1g
这是我的MainActivity类'onCreate
:
and this is my MainActivity class' onCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* Assigning the toolbar object ot the view
and setting the the Action bar to our toolbar */
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
// enable ActionBar app icon to behave as action to toggle nav drawer
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //pulsante drawer
getSupportActionBar().setHomeButtonEnabled(true); //pulsante dietro
//Initializing
mTitle = mDrawerTitle = getTitle();
SharedPreferences usrData = getSharedPreferences(
usr_loggedin,
MODE_PRIVATE);
AVATARresID = R.mipmap.aka;
// Add Drawer Item to dataList
dataList = new ArrayList<>();
dataList = prepareDatalist(dataList, NAME, EMAIL, AVATARresID);
mRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView);
mRecyclerView.setHasFixedSize(true);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mAdapter = new MyAdapter(dataList, mSelectedPositions); //**ERROR HERE**
mRecyclerView.setAdapter(mAdapter);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
// Drawer Listener set to the Drawer toggle
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState(); // Finally we set the drawer toggle sync State
}
如何将MyAdapter
类中存在的onClick
的结果拉回到我的MainActivity
,
How do I pull the result of the onClick
that is present in the MyAdapter
class back to my MainActivity
,
int pos;
@Override
public void onClick(View v) {
if (listener != null) {
listener.onItemClicked(getPosition());
pos= getPosition();
Log.d("TAG", "Item clicked at position " + getPosition());
}
}
以便我可以根据单击的项目位置来处理操作?
so that I can handle actions depending on the clicked item position?
推荐答案
MyAdapter
的构造函数还采用实现ClickListener
的类的对象.例如,您可以让Activity
/Fragment
实现该接口,并使用this
作为参数
The constructor of MyAdapter
takes also an object of a class that implements ClickListener
. You could, for instance, let your Activity
/Fragment
implements that Interface and use this
as parameter
public class MainActivity extends Activity implements ViewHolder.ClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ....
mAdapter = new MyAdapter(dataList, mSelectedPositions, this);
// ....
}
这篇关于RecyclerView onItemClicked回调的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!