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()数据库类中所有名称(我称之为它)的 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(...)

希望有帮助!

于 2012-08-24T21:43:30.623 回答