मैं this ट्यूटोरियल का उपयोग करके एक पुनर्चक्रण दृश्य के साथ एक नेविगेशन ड्रॉवर को कार्यान्वित कर रहा हूं, लेकिन मैं पूरे ट्यूटोरियल को लागू नहीं करना चाहता, मैं बस उपयोगकर्ता के क्लिक को संभालना चाहता हूं। मैं onClickListener
मेरी MyAdapter
वर्ग के ViewHolder
अंदर क्रियान्वित किया है:पुनर्नवीनीकरण देखें ItemClicked कॉलबैक
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);
}
}
मैं क्या नहीं समझ सकता है MyAdapter
ऑब्जेक्ट में एक ClickListener
लागू करने के लिए कैसे:
mAdapter = new MyAdapter(dataList, mSelectedPositions, ...?);
तो
है जो उपयोगकर्ता द्वारा एक आइटम पर क्लिक, मैं उपयोगकर्ता के क्लिक को MainActivity
पर वापस संभाल सकता हूं।
मैं एडाप्टर इस तरह से बना लिया है (के रूप में ट्यूटोरियल में उल्लिखित):
पूरे MyAdapter
वर्ग: http://pastie.org/private/cibcsj3zieorlkcgh2rm1g
और यह मेरा MainActivity वर्ग '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
}
कैसे क्या मैं onClick
का परिणाम खींचता हूं जो MyAdapter
कक्षा में मेरे 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());
}
}
ताकि मैं क्लिक की गई वस्तु स्थिति के आधार पर क्रियाओं को संभाल सकूं?
मैं बढ़ाया 'लागू करता View.OnClickListener' और ' mAdapter = नए MyAdapter (DataList, mSelectedPositions, इस) के रूप में
this
का उपयोग करते हैं; जैसा आपने कहा था, लेकिन कीवर्ड 'यह' 'क्लिक लिस्टनर' नहीं बनता है ... आपका क्या मतलब है? –आप प्रतीक ClickListener' का समाधान नहीं कर 'लागू करता है करने के लिए ViewHolder.OnClickListener' – Blackbelt
मैं इस तरह से क्रियान्वित किया है' RecyclerView.ViewHolder.ClickListener' लागू करता है, लेकिन यह कहता है कि '... –