2016-03-25 2 views
-1

у меня есть что-то щелкнуло, и он получает к нему и показывает метод правильного GetText(), но метод SetText не работает ...Настройка щелчка слушателя на кнопке в RecycleView

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)); 
       } 
      } 
     }); 

Здесь это класс адаптера:

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, вы можете реализовать OnClick на родительское представление пункта, как реализовать на кнопку –

+0

Вы говорите мне, чтобы изменить onItemTouchListener и иметь OnClick на представлении Recycler и кнопку последующих или OnClick только на кнопке в RecyclerView, если да, как это сделать, не затрагивая onItemTouch, как вы можете видеть onBindViewHolder? Я пытаюсь реализовать onClickListener, но не работает? – Lion789

+1

Как насчет 'OnClickListener' для каждого элемента в' RecyclerView'? –

ответ

0

Я сделал то же самое в этом проекте, иди сюда и скопировать этот itemclicklistener класс: https://github.com/isaacurbina/MyMovies/blob/c985f28311f25522c7907d090e48dab5fc108c01/app/src/main/java/com/mobileappsco/training/mymovies/Listeners/RecyclerItemClickListener.java

Тогда на вашем Ac или Fragment сделать это с помощью объекта recyclerview.

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 
        } 
       }) 
     ); 

Затем вы можете использовать позицию для ссылки на исходный объект в списке объектов, которые использует ваш адаптер (список должен быть открытым, так что вы можете получить доступ к нему из деятельности или фрагмента), или же, как мне и поместите скрытый текст с идентификатором вместо позиции, которую вы можете получить:

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

Вы также можете проверить весь проект, содержащий класс, который я отправил вам по ссылке выше. Я надеюсь, что это помогает.

С уважением!

+0

Это не работает, давая мне нулевую ссылку на объект пользователя при использовании позиции – Lion789

+0

У вас есть код, чтобы посмотреть? –

+0

Да, здесь http://pastebin.com/BuT3Avte Я не хотел, чтобы вещи были слишком перепутаны, но щелчок дает мне ошибку нулевого объекта на пользователе по какой-то причине ... где, как применение другого кода, кажется, все в порядке. – Lion789

Смежные вопросы