为列表视图项设置标识符 android
Setting an identifier for Listview items android
我正在根据人员数据库创建列表视图。当我点击这个人时,我想显示这个人的详细信息。我想为这个人设置我自己的id,然后调出这个id对应的详细信息。
我尝试通过向标签对象添加一个 int id 并在 onItemClick() 方法中获取视图标签来做到这一点...这适用于列表中的前三个项目(位置 0、1、2 ) 但第四和第五项显示了位置 0 的详细信息,第六项显示了位置 1 的详细信息。不过,它确实偶尔会显示这些项目的正确详细信息,这看起来很奇怪。
这是我的基本适配器:
public class ItemListBaseAdapter extends BaseAdapter {
private static ArrayList<PersonObject> itemDetailsrrayList;
private LayoutInflater l_Inflater;
public ItemListBaseAdapter(Context context, ArrayList<PersonObject> results) {
itemDetailsrrayList = results;
l_Inflater = LayoutInflater.from(context);
}
public int getCount() {
return itemDetailsrrayList.size();
}
public Object getItem(int position) {
return itemDetailsrrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = l_Inflater.inflate(R.layout.personlist, null);
holder = new ViewHolder();
holder.Name = (TextView) convertView.findViewById(R.id.namespace);
holder.id=itemDetailsrrayList.get(position).getId();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.Name.setText(itemDetailsrrayList.get(position).getName());
return convertView;
}
}
这是显示列表视图的片段:
public class HomeFragment extends Fragment {
private ListView lv1;
private DatabaseHandler db;
ArrayList<PersonObject> contacts;
private ViewHolder myTag;
private ViewHolder vh;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.item_main, container, false);
lv1 = (ListView) view.findViewById(R.id.listV_main);
db = new DatabaseHandler(getActivity());
contacts=db.getAllPersonItems();
lv1.setAdapter(new ItemListBaseAdapter(getActivity(), contacts));
lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
vh=(ViewHolder)view.getTag();
Intent i=new Intent(getActivity(),TabActivityPersonPage.class);
i.putExtra("id",Integer.toString(vh.id));
startActivity(i);
}
});
return view;
}
}
这是我的 ViewHolder class:
public class ViewHolder {
TextView Name;
TextView ReportedMissing;
ImageView itemImage;
TextView Age;
TextView Contact;
TextView Distance;
int id;
}
我可能以完全错误的方式处理这个问题,我不确定。非常感谢任何帮助。
在 else 部分之后移动下一行,
holder.id=itemDetailsrrayList.get(position).getId();
所以 getView
必须是:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = l_Inflater.inflate(R.layout.personlist, null);
holder = new ViewHolder();
holder.Name = (TextView) convertView.findViewById(R.id.namespace);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.id=itemDetailsrrayList.get(position).getId();
holder.Name.setText(itemDetailsrrayList.get(position).getName());
return convertView;
}
convertView == null
并不总是正确的,因此 holder
对象中的 id
没有改变,您需要在 else 部分之后设置您的值以重新初始化该值
我正在根据人员数据库创建列表视图。当我点击这个人时,我想显示这个人的详细信息。我想为这个人设置我自己的id,然后调出这个id对应的详细信息。
我尝试通过向标签对象添加一个 int id 并在 onItemClick() 方法中获取视图标签来做到这一点...这适用于列表中的前三个项目(位置 0、1、2 ) 但第四和第五项显示了位置 0 的详细信息,第六项显示了位置 1 的详细信息。不过,它确实偶尔会显示这些项目的正确详细信息,这看起来很奇怪。
这是我的基本适配器:
public class ItemListBaseAdapter extends BaseAdapter {
private static ArrayList<PersonObject> itemDetailsrrayList;
private LayoutInflater l_Inflater;
public ItemListBaseAdapter(Context context, ArrayList<PersonObject> results) {
itemDetailsrrayList = results;
l_Inflater = LayoutInflater.from(context);
}
public int getCount() {
return itemDetailsrrayList.size();
}
public Object getItem(int position) {
return itemDetailsrrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = l_Inflater.inflate(R.layout.personlist, null);
holder = new ViewHolder();
holder.Name = (TextView) convertView.findViewById(R.id.namespace);
holder.id=itemDetailsrrayList.get(position).getId();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.Name.setText(itemDetailsrrayList.get(position).getName());
return convertView;
}
}
这是显示列表视图的片段:
public class HomeFragment extends Fragment {
private ListView lv1;
private DatabaseHandler db;
ArrayList<PersonObject> contacts;
private ViewHolder myTag;
private ViewHolder vh;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.item_main, container, false);
lv1 = (ListView) view.findViewById(R.id.listV_main);
db = new DatabaseHandler(getActivity());
contacts=db.getAllPersonItems();
lv1.setAdapter(new ItemListBaseAdapter(getActivity(), contacts));
lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
vh=(ViewHolder)view.getTag();
Intent i=new Intent(getActivity(),TabActivityPersonPage.class);
i.putExtra("id",Integer.toString(vh.id));
startActivity(i);
}
});
return view;
}
}
这是我的 ViewHolder class:
public class ViewHolder {
TextView Name;
TextView ReportedMissing;
ImageView itemImage;
TextView Age;
TextView Contact;
TextView Distance;
int id;
}
我可能以完全错误的方式处理这个问题,我不确定。非常感谢任何帮助。
在 else 部分之后移动下一行,
holder.id=itemDetailsrrayList.get(position).getId();
所以 getView
必须是:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = l_Inflater.inflate(R.layout.personlist, null);
holder = new ViewHolder();
holder.Name = (TextView) convertView.findViewById(R.id.namespace);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.id=itemDetailsrrayList.get(position).getId();
holder.Name.setText(itemDetailsrrayList.get(position).getName());
return convertView;
}
convertView == null
并不总是正确的,因此 holder
对象中的 id
没有改变,您需要在 else 部分之后设置您的值以重新初始化该值