更改Android的选择列表视图项图像问题 [英] Change selected list view item image issue in android

查看:132
本文介绍了更改Android的选择列表视图项图像问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序只使用了显示图像和文字列表视图。这是我的适配器编码

  ArrayAdapter<串GT;适配器=新ArrayAdapter<串GT;(MainActivity.this,R.layout.list_item,R.id.name,arrList);    listProductCategories.setAdapter(适配器);    listProductCategories.setOnItemClickListener(新OnItemClickListener(){        @覆盖
        公共无效onItemClick(适配器视图<>母公司,观景,
                INT位置,长的id){              ImageView的imgview =(ImageView的)view.findViewById(R.id.iv_listitem);
                 //这里改变它的背景
                 imgview.setBackgroundResource(R.drawable.fail);            字符串名称=((的TextView)view.findViewById(R.id.name))
                    .getText()的toString()。
            Toast.makeText(MainActivity.this,+名称,10).show();        }
    });

这是截屏上面的编码。

我在这里强调选中的列表items.But我的输出显示一些许多列表视图项图像背景的改变。

请给我一个解决方案......

 < ImageView的机器人:ID =@ + ID / iv_listitem
机器人:layout_width =20dp
机器人:layout_height =20dp
机器人:layout_gravity =center_vertical
机器人:背景=@绘制/ next_unselect
机器人:可聚焦=FALSE/>
<的TextView
机器人:ID =@ + ID /名称
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:layout_gravity =center_vertical
机器人:可聚焦=假
机器人:文字=TextView的
机器人:文字颜色=#003366/>

列表项 -

 < ImageView的机器人:ID =@ + ID / iv_listitem的android:layout_width =20dp机器人:layout_height =20dp机器人:layout_gravity =center_vertical机器人:背景=@绘制/ next_unselect机器人:可聚焦=FALSE/>  < TextView的机器人:ID =@ + ID /名称的android:layout_width =match_parent机器人:layout_height =WRAP_CONTENT机器人:layout_gravity =center_vertical机器人:可聚焦=false的机器人:文本=TextView的机器人:文字颜色=#003366/>


解决方案

我已经使用了自定义的ListView使用自定义适配器和getter和setter方法​​ItemsHolder类。

要更改


  1. 获得该项目的位置。

  2. 在位置更改的项目。

  3. 呼叫 notifyDataSetChanged()您的适配器上刷新列表视图。

例如:

  ItemsHolder IH = hold.get(位置);
ih.setImage(德$ C $的CImage(R.drawable.appicon));
ih.setName(更改);
cus.notifyDataSetChanged();

的test.xml

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
的xmlns:工具=htt​​p://schemas.android.com/tool​​s
机器人:layout_width =match_parent
机器人:layout_height =match_parent工具:上下文=MenuActivity。>< ListView控件
    机器人:ID =@ + ID / listView_Menu
    机器人:layout_width =match_parent
    机器人:layout_height =WRAP_CONTENT
    >< /&的ListView GT;
< / RelativeLayout的>

list_item.xml

 <?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =match_parent>< ImageView的
    机器人:ID =@ + ID / imageView_List_Item
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_centerHorizo​​ntal =真
    机器人:contentDescription =@字符串/ APP_NAME
    机器人:SRC =@绘制/ ic_launcher/><的TextView
    机器人:ID =@ + ID / textView1
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_below =@ + ID / imageView_List_Item
    机器人:layout_centerHorizo​​ntal =真
    机器人:layout_marginTop =28dp
    机器人:文字=TextView的/>< / RelativeLayout的>

MainActivity.java

 公共类MainActivity延伸活动{
ArrayList的< ItemsHolder>举办​​=新的ArrayList< ItemsHolder>();
CustomAdapter CUS;
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.test);
    位图[] =图像德{$ C $的CImage(R.drawable.ic_launcher),德$ C $的CImage(R.drawable.ic_launcher)};
    ListView控件列表=(ListView控件)findViewById(R.id.listView_Menu);
    hold.add(新ItemsHolder(图像[0],image1的));
    hold.add(新ItemsHolder(图像[1],图像2));
     CUS =新CustomAdapter(保持);
     list.setAdapter(CUS);
     list.setOnItemClickListener(新OnItemClickListener()
     {
         公共无效onItemClick(适配器视图<>母公司,查看
                 看来,INT位置,长的ID)
         {
                ItemsHolder IH = hold.get(位置);
                ih.setImage(德$ C $的CImage(R.drawable.appicon));
                ih.setName(更改);
                cus.notifyDataSetChanged();         }
     });}
私人位图德$ C $的CImage(INT RES){
    位图位图= BitmapFactory.de codeResource(getResources()RES);
    返回位图;
}
类ItemsHolder
{
    位图图像;
    字符串名称;
    公共ItemsHolder(位图位图,串串){
        // TODO自动生成构造函数存根
        图像=位图;
        名称=字符串;
    }
    公共位图的getImage(){
        返回形象;
    }
    公共无效setImage(位图图像​​){
        this.image =图像;
    }
    公共字符串的getName(){
        返回名称;
    }
    公共无效setname可以(字符串名称){
        this.name =名称;
    }}
类CustomAdapter扩展了BaseAdapter
{    LayoutInflater吹气;
    ArrayList的< ItemsHolder>清单;
    公共CustomAdapter(ArrayList的< ItemsHolder>清单)
    {
        this.list =清单;
        吹气= LayoutInflater.from(MainActivity.this);    }
    @覆盖
    公众诠释的getCount(){
        // TODO自动生成方法存根
        返回则为list.size();
    }
    @覆盖
    公共对象的getItem(INT为arg0){
        // TODO自动生成方法存根
        返回将arg0;
    }
    @覆盖
    众长getItemId(INT位置){
        // TODO自动生成方法存根
        返回0;
    }
    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        // TODO自动生成方法存根
        ViewHolder持有人;
        如果(convertView == NULL)
        {
            持有人=新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(保持器);
        }
        其他{
            支架=(ViewHolder)convertView.getTag();
        }
        ItemsHolder IH = list.get(位置);
        holder.iv.setImageBitmap(ih.getImage());
        holder.tv.setText(ih.getName());
        返回convertView;
    }}
类ViewHolder
{
    ImageView的IV;
    TextView的电视;
}
}

捕捉

编辑:

要在评论你的问题。

listbkg.xml

 <?XML版本=1.0编码=UTF-8&GT?;
<选择的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>
    <项目的android:STATE_ pressed =真        机器人:可绘制=@绘制/ APPICON/>
    <项目的android:state_focused =假
        机器人:可绘制=@绘制/ ic_launcher/>
< /选择>

然后在XML的ImageView

 的android:背景=@绘制/ listbkg

In my application i just using list view for displaying image and text. This is my adapter coding

ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this, R.layout.list_item, R.id.name, arrList);

    listProductCategories.setAdapter(adapter);

    listProductCategories.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

              ImageView imgview = (ImageView) view.findViewById(R.id.iv_listitem);
                 //And change its background here
                 imgview.setBackgroundResource(R.drawable.fail);

            String name = ((TextView) view.findViewById(R.id.name))
                    .getText().toString();
            Toast.makeText(MainActivity.this, "" + name, 10).show();

        }
    });

This is the screen shot for above coding.

Here i am highlighting the selected list items.But my output displays some of the many list view item image background changed..

Please give me a solution....

<ImageView android:id="@+id/iv_listitem" 
android:layout_width="20dp" 
android:layout_height="20dp" 
android:layout_gravity="center_vertical" 
android:background="@drawable/next_unselect"
android:focusable="false" /> 
<TextView
android:id="@+id/name" 
android:layout_width="match_parent"   
android:layout_height="wrap_content" 
android:layout_gravity="center_vertical"
android:focusable="false" 
android:text="TextView"
android:textColor="#003366" /> 

list item-

  <ImageView android:id="@+id/iv_listitem" android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center_vertical" android:background="@drawable/next_unselect" android:focusable="false" />

  <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:focusable="false" android:text="TextView" android:textColor="#003366" />

解决方案

I have used a Custom ListView with a Custom Adapter and a ItemsHolder class with getter and setters.

To change

  1. Get the position of the item.
  2. Change the item at the position.
  3. CallnotifyDataSetChanged() on your adapter to refresh listview.

Example:

ItemsHolder ih = hold.get(position);
ih.setImage(decodeImage(R.drawable.appicon));
ih.setName("Changed");
cus.notifyDataSetChanged();

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

Snaps

Edit:

To your question in the comment

listbkg.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>

Then for ImageView in xml

android:background="@drawable/listbkg" 

这篇关于更改Android的选择列表视图项图像问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆