ListView项目在转移到其他活动时被销毁

时间:2015-12-15 07:46:10

标签: android listview android-listview dynamic-list

我的第一个活动包含每个单元格中包含textview的列表视图,并使用自定义适配器。因此,如果您单击任何项​​目,它将打开包含文本字段的表单活动。用户可以填写详细信息,按下保存表单按钮后,详细信息将显示在列表视图中。现在我正在尝试动态地将项添加到列表中。我创建了一个按钮,单击该按钮会添加一个新的实例项,以便更多用户可以以相同的方式注册。我已经能够实现这些功能。但是,我现在的问题是当我点击新添加的项目并转到表单活动并单击保存时,我回到列表视图活动后无法看到新添加的条目。我看到的是第一个条目单独。所以我猜它一离开活动就会被摧毁。当我继续在这两个活动之间移动时,如何确保不会销毁所有新添加的项目。

这是我的ListView活动代码:

public class FormTableActivity extends Activity {

    private PassengerListAdapter adapter;
    Button add_passenger;
    String mrzdata,ic_data,name_data;
    SharedPreferences nPref;

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

        nPref = PreferenceManager.getDefaultSharedPreferences(this);


        mrzdata = nPref.getString("MRZ", "");
        name_data = nPref.getString("resultData", "");

        ic_data = nPref.getString("icdata", "");

        final ListView lv1 = (ListView) findViewById(R.id.custom_list);

        adapter = new PassengerListAdapter(this);
        adapter.add(new CustomerDetails(ic_data, name_data, mrzdata));

        add_passenger = (Button) findViewById(R.id.add_user);
        add_passenger.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

//                mrzdata = "";
//                name_data = "";
//                ic_data = "";
                adapter.add(new CustomerDetails(ic_data, name_data, mrzdata));


            }
        });


        lv1.setAdapter(adapter);

        lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {


                Intent intent = new Intent(v.getContext(), FirstActivity.class);
                startActivity(intent);


            }


        });
    }

2 个答案:

答案 0 :(得分:0)

您必须在某处保存这些新添加的项目,例如到SQLite数据库并在创建时检索它们以填充listview

你可以在这里看到你想要的,代码被评论, 这里我有一个listview与自定义适配器有两个项目 Feed的名称和它的URL

我使用文本输入对话框(带有两个编辑文本)添加URL和名称,保存到DB,并在创建时检索它们以填充列表视图 https://github.com/enricocid/iven-feed-reader/blob/master-as/project/app/src/main/java/com/iven/lfflfeedreader/mainact/ListActivity.java

答案 1 :(得分:0)

在Intent之间传递数据的最简单方法是

 Intent intent = new Intent(getBaseContext(), your_list_view_activity.class);
intent.putExtra("String_Key", data1);
//data1 could be an array of string where you have hold the values previously
startActivity(intent);

现在在list_view_activity

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String [] value = extras.getString("String_Key");
}

这样您就不会获得任何异常,但如果有数据,您可以填充listView。

获取数据的另一种方法是通过SharedPreference,但我不推荐它,因为它增加了应用程序的大小。