如何更新listview中的imageview

时间:2011-08-26 08:54:41

标签: android view inflate

我正在创建一个包含自定义布局的列表视图。自定义布局内部是一个imageview。当我使用Listview lv.setonclick监听器时,它为我提供了一个变量View,我可以使用它来操纵drawable。 lv.setOnItemClickListener(new OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> arg0, View listview,
                    int position, long arg3) {
                ImageView pincolor = (ImageView) listview
                        .findViewById(R.id.ivimtrackingpin);
           pincolor.setImageResource(R.drawable.pinred);

但是当我想创建另一个函数时,我没有这个View listview变量。我如何得到它,以便我可以在onclicklistener之外做同样的事情?感谢

EDIT 这是我的列表视图和适配器

SpecialAdapter adapter = new SpecialAdapter(this, list,
                    R.layout.imtracking_row_text, new String[] { "name",
                            "location" }, new int[] { R.id.tvImtrackingName,
                            R.id.tvImtrackingLocation });
HashMap<String, String> temp = new HashMap<String, String>();
                JSONObject user = tracking_users.getJSONObject(i);
                temp.put("name", user.getString("full_name"));
                // upload location time
                temp.put("location", user.getString("last_updated_at"));
                list.add(temp);
lv.setAdapter(adapter);

public class SpecialAdapter extends SimpleAdapter {
    private int[] colors = new int[]{R.drawable.row_background_grey, R.drawable.row_background_white};

    public SpecialAdapter(Context context,
            ArrayList<HashMap<String, String>> list, int resource,
            String[] from, int[] to) {
        super(context, list, resource, from, to);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        int colorPos = position % colors.length;
        view.setBackgroundResource(colors[colorPos]);
        return view;
    }
}

3 个答案:

答案 0 :(得分:2)

全局声明一个View并将listview分配给该视图,您可以在任何地方使用它。

答案 1 :(得分:0)

您可能希望编写自己的BaseAdapter子类或扩展您正在使用的任何ListAdapter实现并覆盖getView()。在那里你可以膨胀ListView行并对ImageView做任何必要的事情。

答案 2 :(得分:0)

您可以通过以下方式找到ImageView

private ImageView getImageViewAtPosition(ListView listView, int pos) {
    final View      line  = listView.getChildAt(pos); 
    final ImageView image = (ImageView) line.findViewById(R.id.the_id_of_your_image_in_the_xml_layout_of_the_line);

    return image;
}

如果您需要知道列表中有多少条目:

private int getCount(ListView listView) {
    return listView.getChildCount();
}

更多详情here