【问题标题】:Retaining items in a List View在列表视图中保留项目
【发布时间】:2013-06-26 17:11:30
【问题描述】:

我是 android 开发的新手,遇到了一些问题。我创建了一个基于用户输入的列表视图。用户必须在对话框中输入一个类别,然后将其添加到列表中。奇迹般有效。问题是一旦用户退出应用程序并再次启动它,我如何保留这些类别?当用户启动应用程序时,列表为空白。我是否必须创建首选项屏幕或其他东西来保存用户键入的内容?这是我的代码:

public class MainActivity extends Activity {

final Context context = this;
ArrayAdapter<String> arrayAdapter;
ArrayList<String> listItems = new ArrayList<String>();
ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    lv = (ListView)findViewById(R.id.listView1);
    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listItems);
    lv.setAdapter(arrayAdapter);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch(item.getItemId()){
    case R.id.menu_add_cat:

        LayoutInflater li = LayoutInflater.from(context);
        View promptAdd = li.inflate(R.layout.prompt_add, null);

        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

        //set prompts.xml to alertDialogBuilder
        alertDialogBuilder.setView(promptAdd);

        final EditText etAddCat = (EditText)promptAdd.findViewById(R.id.etDialogInput);

        //set a dialog message
        alertDialogBuilder.setPositiveButton("Done", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
            /*
             *    add a cat here 
             */
                String input = etAddCat.getText().toString();
                if(null != input && input.length() > 0){
                    listItems.add(input);
                    arrayAdapter.notifyDataSetChanged();
                }else{
                    Toast.makeText(getApplicationContext(), "Please enter a new category", Toast.LENGTH_LONG).show();

                }
            }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });
        // create alert dialog
        AlertDialog alertDialog = alertDialogBuilder.create();

        // show it
        alertDialog.show();
        break;
    }
    //return super.onOptionsItemSelected(item);
    return true;
}

}// end of MainActivity

【问题讨论】:

    标签: android listview saving-data preferencescreen


    【解决方案1】:

    您可以将其保存在 SQLite DB 中,将 CursorAdapter 用于您的列表视图。

    【讨论】:

      【解决方案2】:

      如果您要保存的数据量比较小,您可以使用SharedPreferences 在您的onClick 方法中保存String 数据。

      @Override
      public void onClick(DialogInterface dialog, int which) {
      
          String input = etAddCat.getText().toString();
          if(null != input && input.length() > 0){
              listItems.add(input);
      
              // Add all string data to List<String> listItem
              listItem.add(input);
      
              arrayAdapter.notifyDataSetChanged();
      
          }else{
              Toast.makeText(getApplicationContext(), "Please enter a new category", Toast.LENGTH_LONG).show();
          }
      }
      

      当用户离开你的activity时,使用onStop()回调方法保存你的List&lt;Strings&gt;并通过SharedPreferences存储。

      @Override
      private void onStop() {
          super.onStop();
      
          SharedPreferences.Editor editor = mSharedPreferences.edit();
      
          editor.putString(getResources().getString(R.string.list_of_strings), new HashSet<String>(listItem));
          editor.commit;
      }
      

      使用onStart() 回调,初始化您的ListSharedPreferences。当用户导航到您的活动时,您的列表将在通过onStop() 保存时重新初始化。

      最后,遍历您的列表,将您的项目添加到您的 ArrayList', create yourArrayAdapter` 并将其设置到您的列表中。

      @Override
      private onStart(){
          super.onStart();
      
          SharedPreferences mSharedPreferences;
      
          mSharedPreferences = this.getApplicationContext().getSharedPreferences("MyPreferences", 0);
          List<String> listItems = new ArrayList<String>(mSharedPreferences.getStringSet("ListOfStrings", null));
      
          ListIterator li = listItem.listIterator(0);
      
          while (li.hasNext()) {
              newStatusList.add((String)li.next());
          }
      
          arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listItems);
          lv.setAdapter(arrayAdapter);
      }
      

      【讨论】:

        猜你喜欢
        • 2014-11-05
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多