Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android按id更新自定义XML imageView_Java_Android_Xml_Android Listview_Simpleadapter - Fatal编程技术网

Java Android按id更新自定义XML imageView

Java Android按id更新自定义XML imageView,java,android,xml,android-listview,simpleadapter,Java,Android,Xml,Android Listview,Simpleadapter,我对安卓非常陌生。我正在使用一个列表视图,它使用一个自定义的list_v.xml来容纳x2个文本视图。我还包括了一个imageView,我想通过活动更新它 <?xml version="1.0" encoding="utf-8"?> 我猜我需要引用列表而不是listView.findViewById。我可能完全没有抓住要点 我可以将绘图硬编码为上面的xml,但我希望重用此视图并为其他视图更新图像 这没有道理。适配器将根据需要创建视图,并且这种方法不会节省任何内存 无论如何,若要实现

我对安卓非常陌生。我正在使用一个列表视图,它使用一个自定义的list_v.xml来容纳x2个文本视图。我还包括了一个imageView,我想通过活动更新它

<?xml version="1.0" encoding="utf-8"?>
我猜我需要引用列表而不是listView.findViewById。我可能完全没有抓住要点

我可以将绘图硬编码为上面的xml,但我希望重用此视图并为其他视图更新图像

这没有道理。适配器将根据需要创建视图,并且这种方法不会节省任何内存

无论如何,若要实现目标,需要扩展BaseAdapter类并重写它的getView()方法

类CustomArray扩展了SimpleAdapter{

    public CustomArray(Context context,ArrayList list1, int resource,
                       String[] list2, int[] list3) {
        super(context, list1, resource, list2, list3);

    }

    @Override
    public View getView(final int position, View convertView,     ViewGroup parent) {

        if (convertView == null){
            convertView = super.getView(position, convertView, parent);
            ((ImageView)convertView.findViewById(R.id.icon)).setImageDrawable(R.drawable.tip_selected);
        }
        return convertView;
    }
}
并创建它:

 private void makeActionOverflowMenuShown() {
    CustomArray adapter = new CustomArray(TopTipsActivity.this, oslist,
            R.layout.list_v,
            new String[] { TAG_Cat,TAG_Title},
            new int[] {R.id.title,R.id.body});

    listView.setAdapter(adapter);

这很简单,只需编辑
HashMap
即可

HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_Cat, cat);
map.put(TAG_Title, title);
// the following line will add the default image to your map
map.put("Image", String.valueOf(R.drawable.ic_launcher));
ListAdapter adapter = new SimpleAdapter(TopTipsActivity.this, oslist,
                    R.layout.list_v,
                    new String[] { TAG_Cat, TAG_Title, "Image"},
                    new int[] {R.id.title, R.id.body, R.id.icon});

是的,你需要访问列表中的每一行/元素,然后从中找到ImageView。因此,基本上你应该使用一个扩展BaseAdapter的自定义适配器类。天哪,它真的很简单。我对Android真的很陌生!非常感谢。
 private void makeActionOverflowMenuShown() {
    CustomArray adapter = new CustomArray(TopTipsActivity.this, oslist,
            R.layout.list_v,
            new String[] { TAG_Cat,TAG_Title},
            new int[] {R.id.title,R.id.body});

    listView.setAdapter(adapter);
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_Cat, cat);
map.put(TAG_Title, title);
// the following line will add the default image to your map
map.put("Image", String.valueOf(R.drawable.ic_launcher));
ListAdapter adapter = new SimpleAdapter(TopTipsActivity.this, oslist,
                    R.layout.list_v,
                    new String[] { TAG_Cat, TAG_Title, "Image"},
                    new int[] {R.id.title, R.id.body, R.id.icon});