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;
}
}