我有一个列表视图,其中包含每个项目的背景图片。 我的问题是如何选择列表中的多个项目以及如何更改其背景。 使用此代码,我一次只能选择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 :(得分: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);
} }