保留列表中的项目

时间:2016-03-20 06:32:01

标签: android listview

我已根据建议进行了更改并且工作正常。但是我已经将按钮mainactivity转到main2activity检查列表,但是它给出了错误。 这是我的代码和检查列表按钮是R.Id.viewlist

 public class MainActivity extends AppCompatActivity {
 EditText editText;
  Button addButton;
      @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
     setSupportActionBar(toolbar);
     final EditText editText =(EditText)findViewById(R.id.editText);
     Button button = (Button)findViewById(R.id.addButton);
     button.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             Intent intent = new Intent(MainActivity.this,Main2Activity.class);
             intent.putExtra("text", editText.getText().toString());
             startActivity(intent);
         }
     });
     Button button1 = (Button)findViewById(R.id.viewlist);
     button1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             Intent intent = new Intent(MainActivity.this,Main2Activity.class);
              startActivity(intent);
         }
     });

main2acctivity

public class Main2Activity extends AppCompatActivity {
 ListView listView;
    ArrayAdapter<String> adapter;
   @Override
 protected void onRestart() {
     super.onRestart();
     adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, Global.list1);
      listView.setAdapter(adapter);
     if (Global.list1.size()<1){
         Global.list1=new ArrayList<>();
     }
  }
  @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main2);
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
     setSupportActionBar(toolbar);
       Intent intent1= getIntent();
        listView = (ListView) findViewById(R.id.list);
          adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, Global.list1);
      listView.setAdapter(adapter);
     Global.list1.add(intent1.getStringExtra("text"));
      adapter.notifyDataSetChanged();
                   } 

全局。类

3 个答案:

答案 0 :(得分:0)

为什么不使用共享偏好?将数据保存在活动的onPause中,并在您启动其他活动时将其加载。 http://developer.android.com/training/basics/data-storage/shared-preferences.html

你也可以使用多个片段来解决这个问题,并在包含我认为的两个片段的活动中保存应用程序的状态。

答案 1 :(得分:0)

这取决于您是否要在应用程序使用会话中保留此列表(这意味着如果他们关闭应用程序,列表将从头开始重置。如果是这种情况,您可能希望使用“SharedPreferences”并将您的项目存储在映射到SharedPreferences中的字段的列表中。 如果是这种情况,您可以转到here

这将向您展示如何存储即使用户重新启动应用程序并返回到第二个活动而仍然存在的项目数组列表。

否则,如果您不想在应用程序会话/重新启动之间拥有持久性,那么您实际上只需使用Global Singleton来存储排序列表,如上所述。

 public static class GlobalListStorage {
     private static GlobalListStorage instance = null;
     public ArrayList<String> mItems=new ArrayList<String>();
     protected GlobalListStorage() {
     }

     public GlobalListStorage getInstance() {
         if (instance == null) {
             instance = new GlobalListStorage();
         }
         return instance;
     }
 }

现在,当您要将项目添加到列表中时,您可以在按钮单击侦听器的MainActivity.java中执行以下操作。

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this,Main2Activity.class);
        GlobalListStorage.getInstance().mItems.add(editText.getText().toString());
        startActivity(intent);
    }
});

现在在您的ArrayListAdapter中,确保使用GlobalListStorage.getInstance()。mItems作为您应该使用的arrayList。

答案 2 :(得分:0)

您应该覆盖活动的onRestart元文件并输入代码以使用全局数组填充列表视图。

@Override
public void onRestart()
{
super.onRestart();
adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, Global.list1);
listView.setAdapter(adapter);
}

也许你不想这样做

Global.list1 = new ArrayList();

相反,你应该这样做

if(Global.list1.size()<1)
{
Global.list1 = new ArrayList();
Global.list1.add("First Item - added on Activity Create");
}

修改 对于新问题:

//In the Main2Activity
String haveString=intent1.getStringExtra("text");
if(haveString!=null)
   {
   Global.list1.add(haveString);
   adapter.notifyDataSetChanged();
   }