如何为Android中的每个索引获取BaseAdapter getTag id?
我试图编写一个BaseAdapter代码,其中我希望在每个onClickListener上获得ViewHolder标记id,但在每个索引中我没有获得ViewHolder标记id,它总是给出第一个ViewHolder标记id。如果有10个项目,那么,如果我单击第三个项目,那么在Toast消息中,我也会从第一个项目获得id。但在TextView中,id显示正确 MyCode:如何为Android中的每个索引获取BaseAdapter getTag id?,android,baseadapter,android-viewholder,Android,Baseadapter,Android Viewholder,我试图编写一个BaseAdapter代码,其中我希望在每个onClickListener上获得ViewHolder标记id,但在每个索引中我没有获得ViewHolder标记id,它总是给出第一个ViewHolder标记id。如果有10个项目,那么,如果我单击第三个项目,那么在Toast消息中,我也会从第一个项目获得id。但在TextView中,id显示正确 MyCode: public class MyAdapter extends BaseAdapter{ Activity activity
public class MyAdapter extends BaseAdapter{
Activity activity;
Context context;
ArrayList<String> dataList;
public MyAdapter(Activity activity, Context context,ArrayList<String> dataList)
{
this.activity = activity;
this.context = context;
this.dataList = dataList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return dataList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return dataList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return dataList.size();
}
public class ViewHolder {
TextView data_txt
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
holder = new ViewHolder();
if(convertView==null){
convertView = mInflater.inflate(R.layout.data_layout, parent,false);
holder.data_txt = (TextView) convertView.findViewById(R.id.data);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.data_txt.setText(""+holder);
holder.data_txt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, ""+holder, Toast.LENGTH_SHORT).show();
}
});
return convertView;
} }
公共类MyAdapter扩展了BaseAdapter{
活动;
语境;
ArrayList数据表;
公共MyAdapter(活动、上下文上下文、ArrayList数据列表)
{
这个。活动=活动;
this.context=上下文;
this.dataList=dataList;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回dataList.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回dataList.get(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回dataList.size();
}
公共类视图持有者{
文本视图数据
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
LayoutInflater mInflater=(LayoutInflater)context.getSystemService(Activity.LAYOUT\u INFLATER\u SERVICE);
holder=新的ViewHolder();
if(convertView==null){
convertView=mInflater.inflate(R.layout.data\u布局,父级,false);
holder.data_txt=(TextView)convertView.findViewById(R.id.data);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.data_txt.setText(“+holder”);
holder.data\u txt.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(上下文,“+holder,Toast.LENGTH_SHORT).show();
}
});
返回视图;
} }
所以,我的问题是如何在Toast消息中获取特定的持有者id。请让我知道,给我建议一些好的解决方案。将此字段添加到您的ViewHolder中:
public class ViewHolder {
TextView data_txt
int position;
}
更改getView()中的代码:
您所说的如何在Toast消息中获取特定的持有者id是什么意思?是的,我的意思是相同的..不,我在int position=((ViewHolder)(v.getTag)).position上获取NullPointerException;我没注意到你把听者放在文本视图上。将其改为converView。那么您的意思是从侦听器到convertView。。。但是我总是得到0作为id值
if(convertView==null){
holder = new ViewHolder();
LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.data_layout, parent,false);
holder.data_txt = (TextView) convertView.findViewById(R.id.data);
holder.position = position;
convertView.setTag(holder);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int position = ((ViewHolder)(v.getTag)).position;
Toast.makeText(context, Integer.toString(position), Toast.LENGTH_SHORT).show();
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.data_txt.setText(""+ Integer.toString(position));
holder.position = position;