【发布时间】:2015-05-06 04:19:34
【问题描述】:
我有一个main activity,它有一个listview,它首先加载,我正在启动一个新活动,我试图通过传递intent 将edittext 值传递给我的主要活动.一切正常,但是当我将 editext 值添加到列表视图时,它的添加但是当我转到 second activity 并再次添加并返回到主要活动时,之前添加的数据不再可见,新添加的值正在更新列表视图。
谁能帮我解决这个问题?
这是我的适配器:
public class AdapterListViewData extends BaseAdapter{
private LayoutInflater mInflater;
private Context context;
private ArrayList<DataShow> listData = new ArrayList<DataShow>();
public AdapterListViewData(Context context,ArrayList<DataShow> listData) {
this.context = context;
this.mInflater = LayoutInflater.from(context);
this.listData = listData;
}
public int getCount() {
// TODO Auto-generated method stub
return listData.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
HolderListAdapter holderListAdapter;
if(convertView == null)
{
convertView = mInflater.inflate(R.layout.adapter_listview, null);
holderListAdapter = new HolderListAdapter();
holderListAdapter.txtTitle = (TextView) convertView.findViewById(R.id.txtTitle);
holderListAdapter.txtDetail = (TextView) convertView.findViewById(R.id.txtDetail);
holderListAdapter.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
convertView.setTag(holderListAdapter);
}else{
holderListAdapter = (HolderListAdapter) convertView.getTag();
}
holderListAdapter.txtTitle.setText(listData.get(position).getTitle());
holderListAdapter.txtDetail.setText(listData.get(position).getDetail());
holderListAdapter.checkBox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context,"CheckBox "+ position +" check!!",Toast.LENGTH_SHORT).show();
}
});
convertView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context,"List "+ position +" click!!",Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
}
主活动:
public class CustomListViewActivity extends Activity {
private AdapterListViewData adapterListViewData;
private ArrayList<DataShow> listData = new ArrayList<DataShow>();
private ListView listViewData;
String AddedTask ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
listViewData = (ListView)findViewById(R.id.listViewData);
if (intent.hasExtra("NewTask")) {
AddedTask = this.getIntent().getExtras().getString("NewTask");
listData.add(new DataShow(AddedTask,""));
}
adapterListViewData = new AdapterListViewData(getBaseContext(),listData);
listViewData.setAdapter(adapterListViewData);
adapterListViewData.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(CustomListViewActivity.this, AddTask.class);
startActivity(i);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
数据展示:
public class DataShow {
private String title;
private String detail;
public DataShow(String title,String detail) {
// TODO Auto-generated constructor stub
this.title = title;
this.detail = detail;
}
public String getTitle(){
return this.title;
}
public String getDetail(){
return this.detail;
}
}
持有人:
public class HolderListAdapter {
TextView txtTitle;
TextView txtDetail;
CheckBox checkBox;
}
第二个活动:
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,
CustomListViewActivity.class);
//Bundle bundle = new Bundle();
String TaskName = edit.getText().toString();
//bundle.putString("NewTask", TaskName);
i.putExtra("NewTask", TaskName);
//i.putExtras(bundle);
startActivity(i);
}
});
}
}
【问题讨论】:
-
所以本质上您正在丢失以前的数据,但您的新数据正在更新?
-
我认为你应该 startActivityForResult 而不是 startActivity 来创建新任务。现在我相信你的列表中总会有一项任务。对吗?
-
你之前的数据是持久化的吗,在添加到适配器之前检查一下吗?
标签: android listview android-intent notifydatasetchanged