【发布时间】:2015-05-06 08:59:01
【问题描述】:
场景:
第一个 mainactivity 启动,用户从菜单选项中使用 Intent 启动第二个 Activity,然后他将一些文本添加到 edittext 并使用 Intent 获取该 edittext 值到第一个 Activity 并将该值添加到列表视图。
第一个活动:
public class MainActivity extends Activity {
ListView lv;
EditText et;
String AddedTask ;
ArrayList<Model> modelList;
CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
if (intent.hasExtra("NewTask")) {
AddedTask = this.getIntent().getExtras().getString("NewTask");
lv = (ListView) findViewById(R.id.listViewData);
String name = AddedTask;
Model md = new Model(name);
modelList.add(md);
adapter = new CustomAdapter(getApplicationContext(), modelList);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.action_settings:
return true;
case R.id.action_add_task:
Intent i = new Intent(MainActivity.this, AddTask.class);
startActivity(i);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
第二个活动:
public class AddTask extends Activity {
Button addtask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_task);
// get action bar
ActionBar actionBar = getActionBar();
// Enabling Up / Back navigation
actionBar.setDisplayHomeAsUpEnabled(true);
addtask = (Button) findViewById(R.id.btnaddlist);
findViewById(R.id.btnaddlist).setOnClickListener(
new View.OnClickListener() {
public void onClick(View arg0) {
EditText edit = (EditText) findViewById(R.id.tskname);
Intent i = new Intent(AddTask.this,
MainActivity.class);
//Bundle bundle = new Bundle();
String TaskName = edit.getText().toString();
//bundle.putString("NewTask", TaskName);
i.putExtra("NewTask", TaskName);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//i.putExtras(bundle);
startActivity(i);
}
});
}
}
现在我的问题是我能够将数据添加到列表视图,但每次我回到 mainactivity 时,之前添加的数据都会丢失,并用我的新数据更新旧数据。
我已经搜索了很多 SO 答案,其中大多数人建议添加我已经尝试过但没有任何效果的 adapter.notifyDataSetChanged();。
我已经通过检查适配器是否为空或以这种方式更新数据并获得空指针异常来完成:
if ( adapter== null )
{
adapter = new CustomAdapter(getApplicationContext(), modelList);
lv.setAdapter(adapter);
}
谁能告诉我如何让这个工作?
【问题讨论】:
-
@downvoter-关注评论而不是投反对票
-
使用 ArrayList
modelList;作为吞噬变量 -
数据是否应该一直保存?如果是这样,我们必须使用数据库。否则我们可以在 Intent 中使用 SharedPreferences 或 Extra
-
@Chathura Wijesinghe - 是的,它被用作全局变量
标签: android listview android-intent notifydatasetchanged