在ListActivity中哪里保存复选框选中的联系人?

时间:2011-11-09 03:04:39

标签: android contactscontract

我使用自定义列表适配器显示所有联系人的列表,然后用户将通过单击复选框选择联系人。将所选联系人保存到首选项的好方法是什么,以便我可以在其他地方对其进行测试?我在考虑使用SharedPreferences,但到目前为止,我一直无法找到将数组保存到SharedPrefs的方法。我可以去sqlite路线,但考虑到它们已经包含在数据库中,这似乎有点过分,为什么我不能在那里引用它们。只是不确定如何开始这样做...... 此外,我正在考虑将此方法称为onDestroy,尽管这也可能存在一些问题,因此对此的建议也有帮助。这是一些代码(如果你需要更多的话,请告诉我,还有更多) 谢谢你的至高无上的知识。

ListItemLayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<TwoLineListItem 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <RelativeLayout
        android:id="@+id/relativelayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <TextView
            android:id="@android:id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:textStyle="bold" />

        <TextView
            android:id="@android:id/text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@android:id/text1"
            android:includeFontPadding="false"
            android:paddingBottom="4dip"
            android:textSize="15sp"
            android:textStyle="normal" />

         <CheckBox
                android:id="@+id/checkbox"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:focusable="false"
                                 />
 </RelativeLayout>
</TwoLineListItem>

ContactPicker Activity(为简洁起见,编辑了一些代码):

public class ContactPicker extends ListActivity implements Runnable{


        private List<Contact> contacts = null;
        private Contact con;
        private ContactArrayAdapter cAdapter;
        private ProgressDialog prog = null;
        private Context thisContext = this;
        private CheckBox c1;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            prog = ProgressDialog.show(this, "Contact List", "Getting Contacts", true, false);
            Thread thread = new Thread(this);
            thread.start();

            final CheckBox c1 = (CheckBox)findViewById(R.id.checkbox);

        }
public void run() {...
}
private List<Contact> fillContactsList() {...
}
 private Handler handler = new Handler() {...
}
@Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
            super.onListItemClick(l, v, position, id);
            TextView label = ((TwoLineListItem) v).getText2();
            String phoneNumber = label.getText().toString();
}
}

2 个答案:

答案 0 :(得分:2)

如果你只需要存储一个对象列表(用户),我会跳过数据库并只创建一个JSON对象并将其作为String存储在共享首选项中。它显然取决于您希望存储的用户数量,但如果它是几百或更少,您将不会看到任何类型的性能损失,并且您可以避免处理所有数据库设置。

答案 1 :(得分:1)

是的,你最好的路线是使用sql数据库。在android中你只有两个持久数据存储选项:sqlite和共享首选项*。由于您希望实际存储更复杂的单个键值对,最好的办法是使用sqlite数据库。至于何时存储数据,我只会在每次使用OnCheckChangedListener单独检查或取消选中项目时触发商店。

*是的,还有其他选择,但这些是唯一可以使用的半容易选择。