2015-05-27 12 views
5

मैं 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()); 
     } 
    } 

ताकि मैं क्लिक की गई वस्तु स्थिति के आधार पर क्रियाओं को संभाल सकूं?

उत्तर

1

MyAdapter का निर्माता भी उस वर्ग का एक ऑब्जेक्ट लेता है जो ClickListener लागू करता है। आप सकता है, उदाहरण के लिए, अपने Activity/Fragment लागू करता है कि इंटरफेस और पैरामीटर

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); 
    // .... 
    } 
+0

मैं बढ़ाया 'लागू करता View.OnClickListener' और ' mAdapter = नए MyAdapter (DataList, mSelectedPositions, इस) के रूप में this का उपयोग करते हैं; जैसा आपने कहा था, लेकिन कीवर्ड 'यह' 'क्लिक लिस्टनर' नहीं बनता है ... आपका क्या मतलब है? –

+0

आप प्रतीक ClickListener' का समाधान नहीं कर 'लागू करता है करने के लिए ViewHolder.OnClickListener' – Blackbelt

+0

मैं इस तरह से क्रियान्वित किया है' RecyclerView.ViewHolder.ClickListener' लागू करता है, लेकिन यह कहता है कि '... –

संबंधित मुद्दे