如何在ListView中呈现存储在SharedPreferences中的数据?

时间:2014-07-13 13:46:16

标签: android listview sharedpreferences

在我的应用程序中,我创建了大约3个收藏夹联系人,我从设备的现有联系人中选择。我能够使用Name和PhoneNo成功地将FAV联系人存储到SharedPreferences上,并且还能够检索该信息并将其呈现在TextView中。但我想要的是在列表视图中使用custom_row布局显示该数据。 (我已经使用了TextView的东西来确保我能正确地检索它 - 对我自己进行小测试)

我需要帮助的地方是"在ListView中显示FAV联系人数据,我从SharedPreferences" 中检索。我正在显示我的代码,我可以在TextView中显示数据。如果你们能建议我如何把它放到ListView上,我会很高兴...

以下是代码段:

public class FavContacts_Activity extends ActionBarActivity {
TextView title, tV_Contacts_list;
Button go_Back_to_ContactsList;
ListView imp_Contacts_List;
public static final String PREF_FILE_NAME = "PACKAGE";
SharedPreferences preferences;
String [] imp_Contacts = {};
StringBuffer sb = new StringBuffer();
int count = 0, i = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView (R.layout.favcontacts_list);
        title = (TextView) findViewById (R.id.contacts_title);
        tV_Contacts_list = (TextView) findViewById (R.id.tV_Contacts_list);
        imp_Contacts_List = (ListView) findViewById (R.id.listView1);
        go_Back_to_ContactsList = (Button) findViewById (R.id.btn_Back);
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, imp_Contacts);


        preferences = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);

        for (count = 0; count <3; count++) {
            String contacts_list = preferences.getString("CONTACT "+count, null);
            tV_Contacts_list.setTextSize(15);
            tV_Contacts_list.append("\n       "+ i +". "+ contacts_list);
            imp_Contacts_List.setAdapter(adapter);
            i++;
        }

        go_Back_to_ContactsList.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                finish();
            }
        });
    }
}

如果需要通过AlertDialogs将FAV联系人存储到SharedPreferences,我是否需要代码的其他部分。

以下是屏幕快照: Emulator Screenshot showing the data

2 个答案:

答案 0 :(得分:2)

我不知道你为什么要在循环中设置适配器,但是这里有一个例子,如何用你的联系人创建一个适配器,然后用它来填充自定义行的列表视图:

preferences = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);

List<String> contacts = new ArrayList<String>();
// Loop through the shared prefs, adding contacts to our List
for (int i = 0; i < 3; i++) {
    String contacts_list = preferences.getString("CONTACT "+i, null);
    contacts.add((i+1)+". "+contacts_list);
}

// Create the adapter with contacts
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.listview_row, R.id.list_item,  contacts);

// Populate the list
imp_Contacts_List.setAdapter(adapter);

您的自定义列表视图行 listview_row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">

    <TextView
        android:id="@+id/list_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp">
    </TextView>

</LinearLayout>

注意: 确保您的 favcontacts_list.xml 中包含android:id="@+id/imp_Contacts_List"的列表视图。

答案 1 :(得分:0)

您可以使用adapter.add(data);adapter.remove(data);方法修改适配器中的数据。

试试这个 -

    preferences = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
    for (count = 0; count <3; count++) {
        String contacts_list = preferences.getString("CONTACT "+count, null);
        adapter.add(contacts_list);
        tV_Contacts_list.setTextSize(15);
        tV_Contacts_list.append("\n       "+ i +". "+ contacts_list);
        i++;
    }
    imp_Contacts_List.setAdapter(adapter);