我使用了带有自定义适配器的自定义 ListView 和带有 getter 和 setter 的 ItemsHolder 类。
改变
- 获取项目的位置。
- 更改该位置的项目。
- 调用
notifyDataSetChanged()
您的适配器以刷新列表视图。
例子:
ItemsHolder ih = hold.get(position);
ih.setImage(decodeImage(R.drawable.appicon));
ih.setName("Changed");
cus.notifyDataSetChanged();
测试.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MenuActivity" >
<ListView
android:id="@+id/listView_Menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</ListView>
</RelativeLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imageView_List_Item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:contentDescription="@string/app_name"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageView_List_Item"
android:layout_centerHorizontal="true"
android:layout_marginTop="28dp"
android:text="TextView" />
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity {
ArrayList<ItemsHolder> hold= new ArrayList<ItemsHolder>();
CustomAdapter cus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
Bitmap[] images = {decodeImage(R.drawable.ic_launcher),decodeImage(R.drawable.ic_launcher)};
ListView list = (ListView)findViewById(R.id.listView_Menu);
hold.add(new ItemsHolder(images[0],"image1"));
hold.add(new ItemsHolder(images[1],"image2"));
cus = new CustomAdapter(hold);
list.setAdapter(cus);
list.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View
view, int position, long id)
{
ItemsHolder ih = hold.get(position);
ih.setImage(decodeImage(R.drawable.appicon));
ih.setName("Changed");
cus.notifyDataSetChanged();
}
});
}
private Bitmap decodeImage(int res) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),res);
return bitmap;
}
class ItemsHolder
{
Bitmap image;
String name;
public ItemsHolder(Bitmap bitmap, String string) {
// TODO Auto-generated constructor stub
image = bitmap;
name =string;
}
public Bitmap getImage() {
return image;
}
public void setImage(Bitmap image) {
this.image = image;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class CustomAdapter extends BaseAdapter
{
LayoutInflater inflater;
ArrayList<ItemsHolder> list;
public CustomAdapter(ArrayList<ItemsHolder> list)
{
this.list=list;
inflater= LayoutInflater.from(MainActivity.this);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item, null);
holder.iv= (ImageView) convertView.findViewById(R.id.imageView_List_Item);
holder.tv = (TextView) convertView.findViewById(R.id.textView1);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
ItemsHolder ih = list.get(position);
holder.iv.setImageBitmap(ih.getImage());
holder.tv.setText(ih.getName());
return convertView;
}
}
class ViewHolder
{
ImageView iv;
TextView tv;
}
}
快照
编辑:
在评论中回答你的问题
列表bkg.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/appicon" />
<item android:state_focused="false"
android:drawable="@drawable/ic_launcher" />
</selector>
然后对于 xml 中的 ImageView
android:background="@drawable/listbkg"