Android 视图持有者模式问题。ArrayAdapter中的所有按钮都设置了相同的OnClickListener
我不知道我哪里错了。我在自定义ListView适配器中创建了一个按钮,实现了ViewHolder模式并为按钮设置了OnClickListener 问题是,每当我点击任何一行上的按钮,我都会得到相同的点击结果。相同的标题,相同的用户名 我还需要设置什么?谢谢,圣诞快乐 自定义ListView适配器:Android 视图持有者模式问题。ArrayAdapter中的所有按钮都设置了相同的OnClickListener,android,listview,android-arrayadapter,onclicklistener,android-viewholder,Android,Listview,Android Arrayadapter,Onclicklistener,Android Viewholder,我不知道我哪里错了。我在自定义ListView适配器中创建了一个按钮,实现了ViewHolder模式并为按钮设置了OnClickListener 问题是,每当我点击任何一行上的按钮,我都会得到相同的点击结果。相同的标题,相同的用户名 我还需要设置什么?谢谢,圣诞快乐 自定义ListView适配器: public FeedListViewAdapter(Context context, int layoutResourceId, ArrayList<FeedItemsSetter> d
public FeedListViewAdapter(Context context, int layoutResourceId, ArrayList<FeedItemsSetter> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
static class ViewHolder {
ImageView image;
public TextView postTitle;
public TextView postCateg;
public TextView userInfo;
public TextView likerNames;
public ImageView feedUserImage;
public Button feedLike;
public Button feedShare;
public Button likeButton;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
//ViewHolder holder = null;
// test as field, maybe problem
item = data.get(position);
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
ViewHolder holder = new ViewHolder();
holder.postTitle = (TextView) row.findViewById(R.id.postTitle);
holder.postCateg = (TextView) row.findViewById(R.id.postCateg);
holder.userInfo = (TextView) row.findViewById(R.id.feedUserName);
holder.likerNames = (TextView) row.findViewById(R.id.likerNames);
holder.feedUserImage = (ImageView) row.findViewById(R.id.feedUserImage);
holder.image = (ImageView) row.findViewById(R.id.image);
holder.feedLike = (Button) row.findViewById(R.id.feedLike);
holder.feedShare = (Button) row.findViewById(R.id.feedShareBtn);
holder.likeButton = (Button) row.findViewById(R.id.feedLike);
row.setTag(holder);
}
ViewHolder holder = (ViewHolder) row.getTag();
holder.postTitle.setText(item.getTitle());
holder.postCateg.setText(item.getCategory());
holder.userInfo.setText(item.getUser());
holder.likerNames.setText(item.getLiker());
holder.likerNames.setTag(item.getLikersLong());
Picasso.with(context)
.load("https://graph.facebook.com/" + item.getUserId()
+ "/picture?type=large")
.placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder)
.transform(new RoundedTransformation(90, 4)).resize(100, 100)
.centerCrop().into(holder.feedUserImage);
Picasso.with(context)
.load("http://www.edmondvarga.com/gastrolove/uploads/"
+ item.getImage()).into(holder.image);
holder.likerNames.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//mListener.onNamesClick(v.getTag().toString());
}
});
holder.feedLike.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println(item.getUser() + item.getTitle());
});
return row;
}
public void setCallback(facebookShareListener mListener) {
this.mListener = mListener;
}
public static interface facebookShareListener {
public void onSharePressed(String title, String imagename, String userId);
public void onNamesClick(String title);
}
}
公共FeedListViewAdapter(上下文上下文、int-layoutResourceId、ArrayList数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
静态类视图持有者{
图像视图图像;
公共文本视图postTitle;
公共文本视图邮政编码;
公共文本视图用户信息;
公共文本视图类名称;
公共图像查看用户图像;
公共按钮馈线;
公用按钮馈线共享;
公共按钮式按钮;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
//ViewHolder=null;
//现场测试,可能有问题
item=data.get(位置);
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
ViewHolder=新的ViewHolder();
holder.postTitle=(TextView)row.findViewById(R.id.postTitle);
holder.postCateg=(TextView)row.findViewById(R.id.postCateg);
holder.userInfo=(TextView)row.findViewById(R.id.feedUserName);
holder.likerNames=(TextView)row.findViewById(R.id.likerNames);
holder.feedUserImage=(ImageView)row.findViewById(R.id.feedUserImage);
holder.image=(ImageView)row.findViewById(R.id.image);
holder.feedLike=(按钮)row.findViewById(R.id.feedLike);
holder.feedShare=(按钮)row.findViewById(R.id.feedShareBtn);
holder.likeButton=(按钮)row.findViewById(R.id.feedLike);
row.setTag(支架);
}
ViewHolder=(ViewHolder)row.getTag();
holder.postTitle.setText(item.getTitle());
holder.postCateg.setText(item.getCategory());
holder.userInfo.setText(item.getUser());
holder.likerNames.setText(item.getLiker());
holder.likerNames.setTag(item.getLikersLong());
毕加索。与(上下文)
.加载(“https://graph.facebook.com/“+item.getUserId()
+“/picture?type=large”)
.placeholder(R.drawable.placeholder)
.错误(R.drawable.placeholder)
.transform(新的RoundedTransformation(90,4)).resize(100100)
.centerCrop().into(holder.feedUserImage);
毕加索。与(上下文)
.加载(“http://www.edmondvarga.com/gastrolove/uploads/"
+item.getImage()).into(holder.image);
holder.likerNames.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//onNamesClick(v.getTag().toString());
}
});
holder.feedLike.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
System.out.println(item.getUser()+item.getTitle());
});
返回行;
}
public void setCallback(facebookShareListener mListener){
this.mListener=mListener;
}
公共静态接口facebookShareListener{
已共享的公共void(字符串标题、字符串图像名称、字符串用户标识);
单击名称时的公共无效(字符串标题);
}
}
在if-else语句之外声明ViewHolder:
ViewHolder holder;
if (row == null) {
holder = new ViewHolder();
row.setTag(holder);
}else{
holder = (ViewHolder) row.getTag();
}
将“位置”定义为“最终”,以便您可以在单击中访问特定的项目索引:
public View getView(final int position, View convertView, ViewGroup parent) {
holder.feedLike.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println(data.get(position).getUser() + data.get(position).getTitle());
});
}
ArrayAdapter中的所有按钮都设置了相同的OnClickListener
使用与设置setOnClickListener相同的ViewHolder
实例:
ViewHolder holder;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.postTitle = (TextView) row.findViewById(R.id.postTitle);
.....
row.setTag(holder);
}else{
holder = (ViewHolder) row.getTag();
}
holder.postTitle.setText(item.getTitle());
Move
item=data.get(position)
在getTag()
@MD之后没有区别,我仍然得到了所有单击的相同名称。@EdmondTamas by name您指的是这个mListener.onNamesClick(v.getTag().toString())代码>?@Raghunandan-不,这是对按钮的测试:holder.feedLike.setOnClickListener(新OnClickListener(){覆盖公共void onClick(视图v){System.out.println(item.getUser()+item.getTitle());@EdmondTamas,很高兴帮助您。