2012-01-05 68 views
-1

我有每个项目背景图像列表视图。 我的问题是如何在列表中选择多个项目,如何改变他们的背景。 有了这个代码,我能够在一个时间只选择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> 

回答

0

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

+0

它不是在我的情况下工作,你能不能给我一些代码 – Vamshi 2012-01-05 11:24:24

0

请按照下面的策略,最简单的是:

形成具有列表的大小的布尔数组。 将数组的所有元素的初始值设置为false。 在GetView的setBackground方法根据在该位置阵列值传递背景值。 setItemClickListener列表上,并具有体ARR [位置] =!常用3 [位置],并通过调用adapter.notifyDatasetInvalidated()方法重新加载列表。

+0

你能不能给我这个 – Vamshi 2012-01-05 13:29:31

+0

我没有一个样品,现在示例代码,但我认为这是简单的逻辑,任何人都可以在5-10分钟内实施。 – jeet 2012-01-06 04:54:56

+0

我是新来的android和我不能实现在5 -10分钟。你能给15分钟的时间来解决这个问题吗? – Vamshi 2012-01-06 08:46:45

1

其可能与ListView.CHOICE_MODE_MULTIPLE

请提供以下链接的例子,它可以帮助你。

Android ListView Multiple Choice Example

新建答案:

你怎么能选择在的ListView多个项目?我们一次只能选择一个项目。 它可能检查多个项目ListViewCHOICE_MODE_MULTIPLE,同样的事情我给予例子的链接。

如果您需要在ListView中选择多个项目,则不可能。

还有一个问题也可以用同样的要求,请检查一下。,它可以帮助你。 Selecting multiple items in ListView

+0

在我的情况下,listview中没有复选框只是名称显示在列表视图 – Vamshi 2012-01-05 13:30:29

+0

@Vamshi请检查我更新的答案,它可能会解决您的问题。 – 2012-01-05 14:09:43

+0

不,这是可能的,我在一个应用程序中看到,但没有代码 – Vamshi 2012-01-05 14:20:39

0

我不认为这是可能给我写完整的代码,但我尽我所能为您解决问题:

公共类MainActivity扩展活动 { 无效的onCreate() { 的setContentView (R.layout.main);

} }

+0

我正在讨论显示多选的列表视图。不要创建一个活动,我知道非常好的基础知识,在我的问题中也可以看到我的xml – Vamshi 2012-01-06 08:54:16

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(); 
    } 
相关问题