これが私の現在のアダプターです。
これは私が日付を変換しようとしたものです。
アダプターを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()
さて、これを機能させるために必要なのは、Databaseクラスのすべての名前(私はそれと呼んでいます)でカーソルを返すメソッドだけです。ここで、テーブルスキーマは次のようになっていると思います。
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"
(要素が1つしかないため、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をコンストラクターで1回取得し、それを変数(場合によっては)に保存するだけで、getView LayoutInflater mLayoutInflater
()でこれを使用できますmLayoutInflater.inflate(...)
。
お役に立てば幸いです。