这是我目前的适配器。
这就是我试图转换日期的原因。
我开始将您的适配器更改为 CursorAdapter 但老实说它与此 SimpleCursorAdapter 示例相同(我对其进行了更新以尽可能反映您的代码。):
public class Example extends Activity {
SimpleCursorAdapter adapter;
Database database;
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
database = new Database(this);
database.open();
// See my note below for a detailed explanation of this
Cursor cursor = database.getAllNames();
adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_checked,
cursor,
new String[] { "name" }, // "name" is the column in your database that I describe below
new int[] {android.R.id.text1}, 0);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
Button delete = (Button) findViewById(R.id.delete_button);
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
long[] checkedIds = listView.getCheckedItemIds();
for(long id : checkedIds)
database.deleteName(id);
listView.clearChoices();
adapter.changeCursor(database.getAllNames());
}
});
}
@Override
protected void onDestroy() {
database.close();
super.onDestroy();
}
}
好的,完成这项工作所需要的只是一个方法,该方法返回一个带有getAllNames()
数据库类中所有名称(我称之为它)的 Cursor。现在我假设您的表架构看起来像这样:
CREATE TABLE Names (
_id INTEGER PRIMARY KEY,
names TEXT);
您可以进行相应的调整。您的Database.getAllNames()
方法应该使用这样的查询:
"SELECT _id, name FROM Names;"
或者,如果您希望按字母顺序排列名称:
"SELECT _id, name FROM Names ORDER BY name;"
总之,它看起来像:
public Cursor getAllNames() {
return NameDatabase.rawQuery("SELECT _id, name FROM Names ORDER BY name;", null);
}
我希望能解释一些事情,老实说,这是做你想做的最简单的方法。
添加您自己的行(列表项)布局
添加自己的布局很简单。由于您喜欢 simple_list_item_checked.xml 的外观,让我们复制它的布局并根据您的颜色调整它:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:checkMark="?android:attr/textCheckMark"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:paddingRight="6dip"
android:textAppearance="?android:attr/textAppearanceLarge" />
您需要添加的是:
android:background="#ffffffff"
android:textColor="#ff000000"
(请注意,由于只有一个元素,因此不需要 ViewGroup;没有 LinearLayout,没有 RelativeLayout 等。还有"@android:id/text1"
我们在 SimpleCursorAdapter `android.R.id.text1' 中引用的 id,当您更改布局时,您需要适当地改变这些。)
但是,如果您只想反转颜色,请考虑为整个应用程序使用不同的主题。打开你的清单并添加这个主题:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Light" >
默认情况下,Android 使用 Theme.Dark,只需将其更改为 Theme.Light。现在每个项目默认都有白色背景和黑色文本!
对 getView() 的小幅调整
为了将来参考,在适配器的 getView() 中,您为每个新行调用 getLayoutInflater()。您只需要在构造函数中获取一次 LayoutInflater 并将其保存在一个变量中,可能LayoutInflater mLayoutInflater
,然后在 getView() 中使用它mLayoutInflater.inflate(...)
。
希望有帮助!