1

これが私の現在のアダプターです。

これは私が日付を変換しようとしたものです。

4

1 に答える 1

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()さて、これを機能させるために必要なのは、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(...)

お役に立てば幸いです。

于 2012-08-24T21:43:30.623 に答える