2016-03-25 22 views
-1

Ben buradabir RecycleView içinde bir düğmeye bir tıklama işleyicisi ayarlama

userAdapter.setOnEntryClickListener(new UserAdapter.OnEntryClickListener() { 
      @Override 
      public void onEntryClick(View view, int position) { 
       DatabaseUser user = dbUsersList.get(position); 
        TextView clickedView = (TextView) view.findViewById(R.id.userAdapterFollowBtn); 
       if(view == clickedView) { 
        if (clickedView.getText().equals("following")) { 

         Log.d(Constants.DEBUG, " THE CLICK VIEW IS " + clickedView.getText()); 
         //APPLY Following 
         String txtFollow = "follow"; 
         clickedView.setText(txtFollow); 
         if (user.getIsChanged() == 0) { 
          user.setIsChanged(1); 
         } else { 
          user.setIsChanged(0); 
         } 
         user.setIsType(3); 
         db.updateFollow(user); 

         userAdapter.notifyDataSetChanged(); 
        } else { 

         clickedView.setText("following"); 
         if (user.getIsChanged() == 0) { 
          user.setIsChanged(1); 
         } else { 
          user.setIsChanged(0); 
         } 
         user.setIsType(0); 
         db.updateFollow(user); 

         userAdapter.notifyDataSetChanged(); 
        } 
       } else { 
        Toast.makeText(getApplicationContext(), user.getUsername() + " is selected!", Toast.LENGTH_SHORT).show(); 
        takeToUserProfile(dbUsersList.get(position)); 
       } 
      } 
     }); 

... tıklandığında ve bu o kadar alır ve sağ gettext() yöntemini ancak setText yöntemi çalışmıyor gösteriyor olması adaptör sınıftır: Ben bu projede aynı şeyi

public class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder> { 

    private List<DatabaseUser> dbUsersList, followingList; 
    private DatabaseHelper db; 
    private Context context; 
    private Typeface typeFace, italicTypeface, boldTypeface; 


    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
     public TextView userAdapterUsername, userAdapterFollowBtn; 
     public ImageView userAdapterUserPicture; 


     public MyViewHolder(View view) { 
      super(view); 
      userAdapterUsername = (TextView) view.findViewById(R.id.userAdapterUsername); 
      userAdapterFollowBtn = (TextView) view.findViewById(R.id.userAdapterFollowBtn); 
      userAdapterUserPicture = (ImageView) view.findViewById(R.id.userAdapterUserPicture); 
      Log.d(Constants.DEBUG, "IN MY VIEW HOLDER"); 

      view.setOnClickListener(this); 
      userAdapterFollowBtn.setOnClickListener(this); 

     } 

     @Override 
     public void onClick(View v) { 
      if (mOnEntryClickListener != null) { 
       Log.d(Constants.DEBUG, "IN On click"); 
       mOnEntryClickListener.onEntryClick(v, getAdapterPosition()); 


      } 
     } 
    } 
    private static OnEntryClickListener mOnEntryClickListener; 

    public interface OnEntryClickListener { 
     void onEntryClick(View view, int position); 
    } 

    public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) { 
     mOnEntryClickListener = onEntryClickListener; 
    } 


    public UserAdapter(Context mContext, List<DatabaseUser> usersList, List<DatabaseUser> passedFollowing, Typeface myTypeface, Typeface myTypefaceItalic, Typeface myTypefaceBold) { 
     context = mContext; 
     dbUsersList = usersList; 
     followingList = passedFollowing; 
     typeFace = myTypeface; 
     italicTypeface = myTypefaceItalic; 
     boldTypeface = myTypefaceBold; 
     Log.d(Constants.DEBUG, "IN MY User ADAPTER CONSTRUCTOR"); 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.follow_item, parent, false); 
     Log.d(Constants.DEBUG, "RETURN ITEM VIEW HOLDER"); 


     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, int position) { 


     DatabaseUser user = dbUsersList.get(position); 


     holder.userAdapterUsername.setTypeface(boldTypeface); 

     holder.userAdapterUsername.setText(user.getUsername()); 

     final int pos = getItemViewType(position); 
     //TODO Create pic link 

     if(containsId(dbUsersList.get(pos), followingList)) { 
      //Then show following 
      holder.userAdapterFollowBtn.setText("following"); 


     } else { 
      //show follow 
      holder.userAdapterFollowBtn.setText("follow"); 
     } 



     String userspic = dbUsersList.get(pos).getPicture(); 
     if(userspic == null) { 
      //SET DEFAULT OR PUT DEFAULT IN XML AND DO NOTHING IT SHOULD SHOW DEFAULT PIC 
     } else { 
      //TODO setupUser Pic 
      String img1 = "http://www.hindustantimes.com/Images/popup/2015/6/kungfu2.jpg"; 
      Picasso.with(context).load(img1).transform(new RoundedTransformation()).into(holder.userAdapterUserPicture); 

     } 

    } 

    @Override 
    public int getItemCount() { 
     return dbUsersList.size(); 
    } 

    public static boolean containsId(DatabaseUser currentUser, List<DatabaseUser> list) { 
     for (DatabaseUser object : list) { 
      if (currentUser.getUserId().equals(object.getUserId())) { 
       return true; 
      } 
     } 
     return false; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return position; 
    } 
} 
+0

, OnItemTouchListener uygulamasını uygulamak yerine, –

+0

düğmesindeki uygulamayla ilgili öğenin üst görünümünün üst görünümüne tıklayabilirsiniz onItemTouchListener öğesini değiştirmemizi ve geri dönüşümcü görünümünde onClick öğesinin ve takip düğmesinin veya on düğmesinin bir Geri Bildirim Ver Daha fazla bilgi RecyclerView, eğer onBindViewHolder görebildiğiniz gibi onItemTouch etkilemeden nasıl yapabilirim bir onClickListener uygulamak deneyin ama çalışmaz? – Lion789

+1

"RecyclerView" öğesindeki her öğe için bir 'OnClickListener' nasıl? –

cevap

0

, buraya gidip bu itemclicklistener sınıf kopyalamak: En Ac üzerinde Sonra https://github.com/isaacurbina/MyMovies/blob/c985f28311f25522c7907d090e48dab5fc108c01/app/src/main/java/com/mobileappsco/training/mymovies/Listeners/RecyclerItemClickListener.java

tivity veya Fragment bunu recyclerview nesnenizle yapın.

recyclerView.addOnItemTouchListener(
       new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() { 
        @Override 
        public void onItemClick(View view, int position) { 
         // HERE GOES YOUR CODE FOR THE CLICK OF THE ITEM 
        } 
       }) 
     ); 

Sonra (eğer Aktivite veya Fragment erişebilirsiniz böylece kamu olmalıdır listesi) adaptör kullanıyor nesneleri listesi içindeki orijinal nesneye başvuruda konumunu kullanabilir veya benzeri yapabilirsiniz Ben ve aşağıdaki ile alabilirsiniz konum yerine kimliği ile gizli bir textview koyun:

TextView clickedItem = (TextView) view.findViewById (R.id.hidden_id_textview); int id = clickedItem.getText();

Ayrıca, sizi yukarıdaki bağlantıya gönderdiğim sınıfı içeren projenin tamamını kontrol edebilirsiniz. Umut ediyorum bu yardım eder.

Saygılarımızla!

+0

Bu çalışma değildi, kullanıcı nesnesinde bana boş bir başvuru veriyor – Lion789

+0

pozisyonunu kullanırken Kodu görmek için bir yer var mı? –

+0

Evet burada http://pastebin.com/BuT3Avte Bir şeyleri çok fazla karıştırmak istemedim ama tıklama bana bir sebepten dolayı kullanıcı için boş bir nesne hatası veriyor ... diğer kodun uygulandığı yer iyi görünüyor. – Lion789

İlgili konular