【问题标题】:Setting an identifier for Listview items android为Listview项目android设置标识符
【发布时间】:2015-02-25 13:18:33
【问题描述】:

我正在从人员数据库创建一个列表视图。当我点击这个人时,我想调出这些人的详细信息。我想为这个人设置我自己的 id,然后调出这个 id 对应的详细信息。

我试图通过向标签对象添加一个 int id 并在 onItemClick() 方法中获取视图标签来做到这一点......这适用于列表中的前三个项目(位置 0、1、2)但是第 4 和第 5 项显示位置 0 的详细信息,第 6 项显示位置 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 类:

公共类 ViewHolder {

TextView Name;
TextView ReportedMissing;
ImageView itemImage;
TextView Age;
TextView Contact;
TextView Distance;
int id;

}

我可能以完全错误的方式处理这个问题,我不确定。非常感谢任何帮助。

【问题讨论】:

    标签: android android-listview baseadapter


    【解决方案1】:

    在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 部分之后设置您的值以重新初始化该值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多