2015-10-20 135 views
0

如何处理这种情况 - >我有一个在回收站查看它的列表,我想选择其中一个选项:绿色,黄色或红色的脸来获得从列表项中选择对象的值我选择了 所以我觉得像下面这样的东西,但是当我选择其中一个面时会发生任何事情。我认为那个按钮点击监听器不起作用。请有人能推动我做出更好的建议,举例说明一下,或者我可以告诉我做错了什么?如何处理与recyclerview项目与三个选项来选择

我的适配器

public class LikeListAdapter extends RecyclerView.Adapter<LikeListAdapter.LikeItemViewHolder> { 

    private List<Goals> goalsList; 
private SparseBooleanArray selectedItems; 

    public LikeListAdapter(List<Goals> goalsList) { 
     this.goalsList = goalsList; 
    } 

    @Override 
    public LikeItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     Context context = parent.getContext(); 
     LayoutInflater inflater = LayoutInflater.from(context); 
     View view = inflater.inflate(R.layout.recycler_item_like, parent, false); 
     return new LikeItemViewHolder(view); 
    } 


    @Override 
    public void onBindViewHolder(LikeItemViewHolder holder, int position) { 
     final Goals goals = goalsList.get(position); 
     if (goals != null && getItemCount() > 0) { 
      holder.goalsDescriptionTextView.setText(goals.getDescription()); 
      holder.happyButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.e("fretgr", "get Green Point = " + goals.getGreenPoint()); 
        setToggleSelection(1); 
       } 
      }); 

      holder.sosoButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.e("rtret", "get Yellow Point = " + goals.getYellowPoint()); 
        setToggleSelection(2); 
       } 
      }); 

      holder.angryButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.e("ewwr", "get Red Point = " + goals.getRedPoint()); 
        setToggleSelection(3); 
       } 
      }); 

     } 

    } 

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


    public class LikeItemViewHolder extends RecyclerView.ViewHolder { 
     @Bind(R.id.description_goalsTextView) 
     TextView goalsDescriptionTextView; 
     @Bind(R.id.happy) 
     ImageView happyButton; 
     @Bind(R.id.soso) 
     ImageView sosoButton; 
     @Bind(R.id.angry) 
     ImageView angryButton; 

     public LikeItemViewHolder(View itemView) { 
      super(itemView); 
      ButterKnife.bind(this, itemView); 

     } 
    } 

     // method to access in activity after updating selection 
    public List<Goals> getGoalsList() { 
     return goalsList; 
    } 

    public void setToggleSelection(int pointType){ 
     selectedItems = new SparseBooleanArray(); 
     if (selectedItems.get(pointType, false)) { 
      selectedItems.delete(pointType); 
     } else { 
      selectedItems.put(pointType, true); 
     } 
     notifyItemChanged(pointType); 
    } 

    public int getToggleSelection(){ 
     return 0; 
    } 
} 

我的片段

LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
     layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     layoutManager.scrollToPosition(0); 
     assocGoalsRecyclerView.setLayoutManager(layoutManager); 
     assocGoalsRecyclerView.setHasFixedSize(true); 
     likeListAdapter = new LikeListAdapter(associateList); 
     assocGoalsRecyclerView.setAdapter(likeListAdapter); 
     assocGoalsRecyclerView.addOnItemTouchListener(RecycleTouchListener); 

private RecyclerView.OnItemTouchListener RecycleTouchListener = new RecyclerView.OnItemTouchListener() { 
     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
      View child = assocGoalsRecyclerView.findChildViewUnder(e.getX(), e.getY()); 
      if(child!=null && mGestureDetector.onTouchEvent(e)){ 
       final int position = assocGoalsRecyclerView.getChildAdapterPosition(child); 

       final Goals goals = associateList.get(position); 
       final Categories c = categoriesList.get(position); 
       final int type = likeListAdapter.getToggleSelection(); 



       return true; 
      } 
      return false; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent e) { } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } 
    }; 

回答

0

我发现基于在另一个反应和sugestions一个答案! Android: handling clicks on image view inside recycler's view item using touch framework

在我的片段从片段

段:

LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
     layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     layoutManager.scrollToPosition(0); 
     assocGoalsRecyclerView.setLayoutManager(layoutManager); 
//  assocGoalsRecyclerView.addItemDecoration(new SimpleDividerItemDecoration(getActivity())); 
     assocGoalsRecyclerView.setHasFixedSize(true); 
    likeListAdapter = new LikeListAdapter(associateList, onItemClickCallback); 
    assocGoalsRecyclerView.setAdapter(likeListAdapter); 

public static class OnItemClickListener implements View.OnClickListener { 
     private int position; 
     private OnItemClickCallback onItemClickCallback; 

     public OnItemClickListener(int position, OnItemClickCallback onItemClickCallback) { 
      this.position = position; 
      this.onItemClickCallback = onItemClickCallback; 
     } 

     @Override 
     public void onClick(View view) { 
      onItemClickCallback.onItemClicked(view, position); 
     } 

     public interface OnItemClickCallback { 
      void onItemClicked(View view, int position); 
     } 
    } 


    private OnItemClickListener.OnItemClickCallback onItemClickCallback = new OnItemClickListener.OnItemClickCallback() { 
     @Override 
     public void onItemClicked(View view, int position) { 
      switch(view.getId()){ 
       case R.id.happy: 
        Log.e("rtetre", "happy assessed and position is = " + position); 
        break; 
       case R.id.soso: 
        Log.e("rwere", "soso assessed and position is = " + position); 
        break; 
       case R.id.angry: 
        Log.e("dfrefgt", "angry assessed and position is = " + position); 
        break; 
      } 
     } 
    }; 

在我的适配器

public class LikeListAdapter extends RecyclerView.Adapter<LikeListAdapter.LikeItemViewHolder> { 

    private List<Goals> goalsList; 
    private LikeFragment.OnItemClickListener.OnItemClickCallback onItemClickCallback; 

public LikeListAdapter(List<Goals> goalsList, LikeFragment.OnItemClickListener.OnItemClickCallback onItemClickCallback) { 
    this.goalsList = goalsList; 
    this.onItemClickCallback = onItemClickCallback; 
} 

@Override 
public LikeItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    Context context = parent.getContext(); 
    LayoutInflater inflater = LayoutInflater.from(context); 
    View view = inflater.inflate(R.layout.recycler_item_like, parent, false); 

    LikeItemViewHolder likeItemViewHolder = new LikeItemViewHolder(view); 
    return likeItemViewHolder; 
} 


@Override 
public void onBindViewHolder(LikeItemViewHolder holder, int position) { 
    final Goals goals = goalsList.get(position); 
    if (goals != null && getItemCount() > 0) { 
     holder.goalsDescriptionTextView.setText(goals.getDescription()); 
     holder.happyButton.setOnClickListener(new LikeFragment.OnItemClickListener(position, onItemClickCallback)); 
     holder.sosoButton.setOnClickListener(new LikeFragment.OnItemClickListener(position, onItemClickCallback)); 
     holder.angryButton.setOnClickListener(new LikeFragment.OnItemClickListener(position, onItemClickCallback)); 

    } 

} 

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


public static class LikeItemViewHolder extends RecyclerView.ViewHolder { 
    @Bind(R.id.description_goalsTextView) 
    TextView goalsDescriptionTextView; 
    @Bind(R.id.happy) 
    ImageView happyButton; 
    @Bind(R.id.soso) 
    ImageView sosoButton; 
    @Bind(R.id.angry) 
    ImageView angryButton; 


    public LikeItemViewHolder(View itemView) { 
     super(itemView); 
     ButterKnife.bind(this, itemView); 
    } 
} 

}