我是Android开发的新手,正在创建一个简单的待办事项列表。我试图让我的应用程序更改特定项目的背景颜色,并在我点击它时保持它的背景颜色(类似于突出显示)。我尝试过使用setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)
,但这给了我一个复选框,这不是我想要的。我不想要复选框,而是想要改变背景颜色。
我已经在stackoverflow上阅读了很多关于这个问题的线程,但是没有一个解决了我的问题。任何建议将不胜感激。谢谢!
我的TodoActivity课程是:
package com.example.simpletodo;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class TodoActivity extends Activity {
ArrayList<String> items;
ArrayAdapter<String> itemsAdapter;
ListView lvItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_todo);
lvItems = (ListView) findViewById(R.id.lvItems);
items = new ArrayList<String>();
itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
lvItems.setAdapter(itemsAdapter);
items.add("First Item");
items.add("Second Item");
setupListViewListener();
lvItems.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, items));
lvItems.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
private void setupListViewListener() {
lvItems.setOnItemLongClickListener(new android.widget.AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long rowId) {
items.remove(position);
itemsAdapter.notifyDataSetChanged();
return true;
}
});
}
public void addTodoItem(View v) {
EditText etNewItem = (EditText) findViewById(R.id.etNewItem);
itemsAdapter.add(etNewItem.getText().toString());
etNewItem.setText("");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
我的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="${relativePackage}.${activityClass}" >
<ListView
android:id="@+id/lvItems"
android:layout_width="match_parent"
android:layout_height="380dp"
android:layout_above="@+id/button1"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="30dp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="15dp"
android:layout_marginRight="18dp"
android:onClick="addTodoItem"
android:text="@string/button_add" />
<EditText
android:id="@+id/etNewItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="15dp"
android:layout_marginLeft="10dp"
android:layout_toLeftOf="@+id/button1"
android:hint="@string/add_new_item" >
<requestFocus />
</EditText>
</RelativeLayout>
答案 0 :(得分:0)
我道歉,改变了我的答案,因为我的第一个不正确。以下是使用默认适配器选择/突出显示多个项目的方法:
String[] strArray = {"row1", "row2", "row3"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_activated_1, strArray);
lv.setAdapter(adapter);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
上面的代码会为您突出显示所选项目。如果您需要复选框,请使用以下布局替换:
android.R.layout.simple_list_item_multiple_choice
以下功能可让您确定当前选择的项目。
lv.getCheckedItemPositions();
lv.getCheckedItemIds();
对于更复杂的事情(例如,自定义背景颜色,外观等),您需要提供自定义布局和/或覆盖适配器的getView()函数。这是一个很好的教程:http://www.vogella.com/tutorials/AndroidListView/article.html