Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Android 如何在单击图像后在自定义列表视图中添加图像_Android_Android Activity - Fatal编程技术网

Android 如何在单击图像后在自定义列表视图中添加图像

Android 如何在单击图像后在自定义列表视图中添加图像,android,android-activity,Android,Android Activity,我正试图从布局图中拍摄图像。当用户选择任何图像时,它将显示在自定义列表视图中。当我第一次单击图像时,它会显示在自定义列表视图上,但当我第二次选择图像时,它会覆盖第一个图像。下面是代码供查看 这是我的主课 package com.example.zeus_technologies.customlistview; import android.app.Activity; import android.content.Context; import android.support.v7.app.Ap

我正试图从布局图中拍摄图像。当用户选择任何图像时,它将显示在自定义列表视图中。当我第一次单击图像时,它会显示在自定义列表视图上,但当我第二次选择图像时,它会覆盖第一个图像。下面是代码供查看

这是我的主课

package com.example.zeus_technologies.customlistview;

import android.app.Activity;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View; 
import android.widget.ImageView;
import android.widget.ListView;

public class MainActivity extends Activity {
ListView list;

String[] itemname ={
        "Safari",
};
Integer[] imgid={
        R.drawable.a,
        R.drawable.ab,
        R.drawable.abc,
        R.drawable.abcd,
};


@Override
protected void onCreate(Bundle savedInstanceState) {
 //   list=(ListView)findViewById(R.id.list);

    final Context context=this;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    list = (ListView) findViewById(R.id.list);
    ImageView[] im = new ImageView[4];
    im[0] = (ImageView) findViewById(R.id.imageview1);
    im[1] = (ImageView) findViewById(R.id.imageview2);
    im[2] = (ImageView) findViewById(R.id.imageview3);
    im[3] = (ImageView) findViewById(R.id.imageview4);

    im[0].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            CustomListAdapter adapter=new CustomListAdapter((Activity) context,itemname, imgid[0]);

                         list.setAdapter(adapter);

        }
    });
    im[1].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


           CustomListAdapter adapter = new CustomListAdapter((Activity) context, itemname, imgid[1]);

            list.setAdapter(adapter);

        }
    });
}
下面是我的列表适配器类 package com.example.zeus_technologies.customlistview

import android.app.Activity;
import android.content.Context;
import android.media.Image;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomListAdapter extends ArrayAdapter<String> {

private final Activity context;
private final String[] itemname;
private final Integer imgid;
public CustomListAdapter(Activity context,String[] itemname ,Integer imgid)           {
    super(context, R.layout.mylist, itemname);
    // TODO Auto-generated constructor stub

    this.context=context;
    this.itemname=itemname;
   this.imgid=imgid;
}

 public View getView(int position,View view,ViewGroup parent) {
    LayoutInflater inflater=context.getLayoutInflater();
    View rowView=inflater.inflate(R.layout.mylist, null,true);

    //TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    //TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);
    //txtTitle.setText(itemname[position]);
     imageView.setImageResource(imgid);

     ///extratxt.setText("Description "+itemname[position]);
   return rowView;

};
导入android.app.Activity;
导入android.content.Context;
导入android.media.Image;
导入android.net.Uri;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
公共类CustomListAdapter扩展了ArrayAdapter{
私人最终活动背景;
私有最终字符串[]itemname;
私有最终整数imgid;
公共CustomListAdapter(活动上下文,字符串[]项名称,整数imgid){
super(context,R.layout.mylist,itemname);
//TODO自动生成的构造函数存根
this.context=context;
this.itemname=itemname;
this.imgid=imgid;
}
公共视图getView(内部位置、视图视图、视图组父视图){
LayoutInflater充气器=上下文。getLayoutInflater();
视图行视图=充气机。充气(R.layout.mylist,null,true);
//TextView txtTitle=(TextView)rowView.findViewById(R.id.item);
ImageView ImageView=(ImageView)rowView.findViewById(R.id.icon);
//TextView extratxt=(TextView)rowView.findViewById(R.id.textView1);
//setText(项目名称[位置]);
setImageResource(imgid);
///extractxt.setText(“说明”+项目名称[位置]);
返回行视图;
};
}


还有一件事。我已经尝试从onClickListener中生成适配器对象。但它仍然不起作用

您不希望每次向其中添加新项时都设置新适配器,您要做的是将适配器设置为listview一次,然后更新基础数据集并调用
适配器。notifyDataSetChanged()。类似这样的代码(伪代码):

主要活动

public class MainActivity extends Activity implements View.OnClickListener {

    private List<ListItem> dataSet;

    private ListView list;

    private CustomListAdapter adapter;

    private ImageView imageview1, imageview2, imageview3, imageview4;

    private Integer[] ids = {
        R.drawable.first,
        R.drawable.second,
        R.drawable.third,
        R.drawable.fourth,
    };

    private String[] names = {
        "First",
        "Second",
        "Third",
        "Fourth",
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list = (ListView) findViewById(R.id.listView);

        dataSet = new ArrayList<>();

        adapter = new CustomListAdapter(this, dataSet);

        list.setAdapter(adapter);

        imageview1 = (ImageView) findViewById(R.id.imageview1);
        imageview2 = (ImageView) findViewById(R.id.imageview2);
        imageview3 = (ImageView) findViewById(R.id.imageview3);
        imageview4 = (ImageView) findViewById(R.id.imageview4);

        imageview1.setOnClickListener(this);
        imageview2.setOnClickListener(this);
        imageview3.setOnClickListener(this);
        imageview4.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        int selectedImage;

        if (v == imageview1) {
            selectedImage = 0;
        } else if (v == imageview2) {
            selectedImage = 1;
        } else if (v == imageview3) {
            selectedImage = 2;
        } else {
            selectedImage = 3;
        }

        dataSet.add(new ListItem(names[selectedImage], ids[selectedImage]));
        adapter.notifyDataSetChanged();
    }
}

我认为在添加新的
adpter
之前,您需要将
列表(Listview)
adpter
设为空。像下面这样尝试
list.setAdapter(null)
列表之前。设置适配器(适配器)您不希望每次数据更改时都为listview设置新的适配器。您应该使用空数据集在
onCreate
方法中将适配器设置为listview,并调用
adapter.notifyDataSetChanged()每次向数据集添加新项时。它现在正在工作。thnx这对我真的是一个很大的帮助:)很高兴听到,如果这解决了问题,请接受我的回答。
public class CustomListAdapter extends BaseAdapter {

    private final Context context;

    private final List<ListItem> dataSet;

    public CustomListAdapter(Context context, List<ListItem> dataSet) {
        super();
        this.context = context;
        this.dataSet = dataSet;
    }

    @Override
    public int getCount() {
        return dataSet.size();
    }

    @Override
    public Object getItem(int position) {
        return dataSet.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.list_item, parent, false);

        ListItem item = dataSet.get(position);

        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
        TextView textView = (TextView) rowView.findViewById(R.id.name);

        imageView.setImageResource(item.getId());
        textView.setText(item.getName());

        return rowView;
    }
}
public class ListItem {

    private String name;
    private int id;

    public ListItem(String name, int id) {
        this.name = name;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}