I RecycleView
bin mit Daten angezeigt werden, in jeder ListItem hat 3-Taste: stat_btn
, comment_btn
und forward_btn
. Ich möchte wissen, welche Schaltfläche der Benutzer geklickt hat, um die andere Funktion zu tun, also versuche ich in der Methode onClick
mit view.getId() anzuzeigen, auf welche Schaltfläche geklickt wurde, aber view.getId()
gibt immer -1 zurück;recycleview Klick Zuhörer, SubView klicken, view.getId() = -1
04-12 10:32:44.273 29382-29382/com.smartspace.magicmirror I/QUESTIONNAIREADAPTER: ---->>view.getid:-1
04-12 10:32:44.273 29382-29382/com.smartspace.magicmirror I/QUESTIONNAIREFRAGMENT: ---->>onItemClick: -1
hier ist mein Code: der Adapter
public class QuestionnaireAdapter extends RecyclerView.Adapter<QuestionnaireAdapter.QuestionnaireViewHolder> implements OnClickListener{
private static final String TAG = "QUESTIONNAIREADAPTER";
public Context context;
public Uri picTestUrl = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
public Uri picTestUrl2 = Uri.parse("http://magicwang.oss-cn-qingdao.aliyuncs.com/test.jpg");
private OnRecycleViewItemClickListener mOnItemClickListener = null;
public interface OnRecycleViewItemClickListener {
void onItemClick(View view , String data);
}
public void setOnItemClickListener(OnRecycleViewItemClickListener listener) {
this.mOnItemClickListener = listener;
}
public QuestionnaireAdapter(Context context){
this.context = context;
}
@Override
public QuestionnaireViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_questionnaire_item, parent, false);
QuestionnaireViewHolder questionnaireViewHolder =
new QuestionnaireViewHolder(view);
view.setOnClickListener(this);
return questionnaireViewHolder;
}
@Override
public void onBindViewHolder(final QuestionnaireViewHolder holder, int position) {
//holder.tv.setText("22");
holder.dressImageView.setImageURI(picTestUrl2);
holder.itemView.setTag("tag");
}
@Override
public int getItemCount() {
return 10;
}
@Override
public void onClick(View v) {
Log.i(TAG,"---->>view.getid:" + v.getId());
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(v,(String)v.getTag());
}
}
ViewHolder
class QuestionnaireViewHolder extends RecyclerView.ViewHolder {
ImageView userIcon;
TextView userName;
TextView questionnaireTime;
SimpleDraweeView dressImageView;
//底部收藏、评论和转发按钮
ImageView starBtn;
ImageView commmentBtn;
ImageView forwardBtn;
public QuestionnaireViewHolder(View itemView) {
super(itemView);
userIcon = (ImageView) itemView.findViewById(R.id.user_icon);
userName = (TextView) itemView.findViewById(R.id.user_name);
questionnaireTime = (TextView) itemView.findViewById(R.id.questionnaire_time);
dressImageView = (SimpleDraweeView) itemView.findViewById(R.id.dress_imageview);
starBtn = (ImageView) itemView.findViewById(R.id.star_btn);
commmentBtn = (ImageView) itemView.findViewById(R.id.comment_btn);
forwardBtn = (ImageView) itemView.findViewById(R.id.forward_btn);
}
}
}
und das Fragment, das den Adapter und das recyclerView verwenden
public class QuestionnaireFragment extends Fragment {
public static final String TAG = "QUESTIONNAIREFRAGMENT";
// TODO: Customize parameter argument names
private static final String ARG_COLUMN_COUNT = "column-count";
// TODO: Customize parameters
private int mColumnCount = 1;
// private OnListFragmentInteractionListener mListener;
private RecyclerView qusetionnaireRecyclerView;
private QuestionnaireAdapter mQuestionnaireAdapter;
/**
* Mandatory empty constructor for the fragment manager to instantiate the
* fragment (e.g. upon screen orientation changes).
*/
public QuestionnaireFragment() {
}
// TODO: Customize parameter initialization
@SuppressWarnings("unused")
public static QuestionnaireFragment newInstance(int columnCount) {
QuestionnaireFragment fragment = new QuestionnaireFragment();
Bundle args = new Bundle();
args.putInt(ARG_COLUMN_COUNT, columnCount);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT);
}
mQuestionnaireAdapter = new QuestionnaireAdapter(AppApplication.getContext());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_questionnaireitem_list, container, false);
qusetionnaireRecyclerView = (RecyclerView) view.findViewById(R.id.questionnaire_list);
qusetionnaireRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
qusetionnaireRecyclerView.setAdapter(mQuestionnaireAdapter);
mQuestionnaireAdapter.setOnItemClickListener(new QuestionnaireAdapter.OnRecycleViewItemClickListener() {
@Override
public void onItemClick(View view, String data) {
Log.i(TAG,"---->>onItemClick: " + view.getId());
switch (view.getId()) {
case R.id.star_btn:
//do something
break;
case R.id.comment_btn:
//do something
break;
case R.id.forward_btn:
//do something
break;
}
}
});
return view;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onDetach() {
super.onDetach();
//mListener = null;
}
}
aber in meinem Code, ich finde v.getId() = -1 –
@ShuaiWang Sie haben Ihre Schaltflächen in Ihrem onCreate nicht deklariert, indem Sie findViewById ersten –
Ich mache es in der –