这是我目前的适配器。
这是我试图转换日期。
答案 0 :(得分:0)
我开始将您的适配器更改为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中引用的id`android.R.id.text1&# 39;,当你改变布局时,你需要适当地改变它们。)
然而如果您只想反转颜色,请考虑为整个应用使用不同的主题。打开你的Manifest并添加这个主题:
<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
)中,并在带有mLayoutInflater.inflate(...)
的getView()中使用它。
希望有所帮助!