如何更改listview中的多个项目背景

时间:2012-01-05 11:04:19

标签: android listview multi-select

我有一个列表视图,其中包含每个项目的背景图片。 我的问题是如何选择列表中的多个项目以及如何更改其背景。 使用此代码,我一次只能选择1个项目。 下面是我的列表视图的xml。

main.xml中

<ListView android:layout_height="350dp" android:id="@id/ListView01" android:layout_width="fill_parent"></ListView>

itemrow.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" android:background="@layout/list_bg"
  android:orientation="vertical">

<TextView android:id="@+id/name"        
    android:textSize="16sp"   android:paddingLeft="25dp"       
    android:textStyle="bold"  android:text="hello"
    android:textColor="#FFFFFF" android:gravity="center_vertical"
    android:layout_width="fill_parent" android:layout_height="wrap_content"/>

</LinearLayout>

list_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_window_focused="false" android:state_selected="true" 
  android:drawable="@android:color/transparent" /> 
<item 
 android:state_selected="false"
    android:state_pressed="false" 
    android:drawable="@drawable/cellbgnew" />
<item android:state_pressed="true" 
    android:drawable="@drawable/cellbghover" />
<item android:state_selected="true"
 android:state_pressed="false" 
    android:drawable="@drawable/cellbghover" />
</selector>

5 个答案:

答案 0 :(得分:1)

可以使用ListView.CHOICE_MODE_MULTIPLE

请查看以下链接中提供的示例,它可能对您有帮助。

Android ListView Multiple Choice Example

新答案:

如何在 ListView 中选择多个项目?我们一次只能选择一个项目。 可以使用 CHOICE_MODE_MULTIPLE 检查 ListView 中的多个项目,同样我给出了示例的链接。

如果您需要在ListView中选择多个项目,则无法实现。

还有一个问题也可以提供相同的要求,请检查。,它可能会对您有所帮助。 Selecting multiple items in ListView

答案 1 :(得分:1)

好的,找到以下代码进行示例活动。:

public class SampleActivity extends Activity {
    private String[] arrItems={"A", "B", "C", "D", "E"};
    private boolean[] arrState={false, false, false, false, false};
    private ListView lv;
    private ArrAdapter adapter;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv=(ListView) findViewById(R.id.listItems);
        adapter=new ArrAdapter(this);
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position,
                    long id) {
                // TODO Auto-generated method stub
                arrState[position]=!arrState[position];
                adapter.notifyDataSetChanged();
            }
        });
    }

    private class ArrAdapter extends ArrayAdapter<String>
    {
        Context mContext=null;
        public ArrAdapter(Context context) {
            super(context, R.layout.row);
            // TODO Auto-generated constructor stub
            mContext=context;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return arrItems.length;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View vi=convertView;
            ViewHolder holder=null;
            if(vi==null)
            {
                vi=LayoutInflater.from(mContext).inflate(R.layout.row, parent, false);
                holder=new ViewHolder();
                holder.mTxt=(TextView) vi.findViewById(R.id.lbl);
                vi.setTag(holder);
            }
            else
                holder=(ViewHolder) vi.getTag();
            holder.mTxt.setText(arrItems[position]);
            if(arrState[position])
                vi.setBackgroundColor(Color.BLUE);
            else
                vi.setBackgroundColor(Color.WHITE);
            return super.getView(position, convertView, parent);
        }


        private class ViewHolder
        {
            TextView mTxt=null;
        }


    }

    private void clear()
    {
        Arrays.fill(arrState, false);
        adapter.notifyDataSetChanged();
    }

答案 2 :(得分:0)

您可以使用ListView.setChoiceMode(ListView.MULTIPLE_CHOICE_MODE)来实现此目的。或者可以创建自己的布局。

答案 3 :(得分:0)

请遵循以下策略,最简单:

创建一个大小为list的布尔数组。 将数组的所有元素的初始值设置为false。 在GetView中,setBackground方法根据该位置上的数组值传递背景值。 列表中的setItemClickListener并具有body arr [position] =!arr [position],并通过调用adapter.notifyDatasetInvalidated()方法重新加载列表。

答案 4 :(得分:0)

我不认为我可以编写完整的代码,但我正在尽力解决您的问题:

公共类MainActivity扩展了Activity {    void onCreate()    {       的setContentView(R.layout.main);

} }