Android 调用notifydatasetchanged()时未修改Arrayadapter
伙计们,我正在使用一个简单的列表视图。我有两个活动,一个是主要的,另一个是添加朋友 在第二个活动中,我在textbox中获取friend的userid,并将该行添加到数据库中,并更新arraylist。 当我返回mainactivity时,我调用onResume函数中的notifyDataSetChanged,并记录arraylist值。Arraylist非常好,并且该行被插入到数据库中,但listview没有得到更新。我不知道这个问题,请帮忙。这是d代码Android 调用notifydatasetchanged()时未修改Arrayadapter,android,android-listview,android-arrayadapter,Android,Android Listview,Android Arrayadapter,伙计们,我正在使用一个简单的列表视图。我有两个活动,一个是主要的,另一个是添加朋友 在第二个活动中,我在textbox中获取friend的userid,并将该行添加到数据库中,并更新arraylist。 当我返回mainactivity时,我调用onResume函数中的notifyDataSetChanged,并记录arraylist值。Arraylist非常好,并且该行被插入到数据库中,但listview没有得到更新。我不知道这个问题,请帮忙。这是d代码 public class VayuAc
public class VayuActivity extends Activity {
/** Called when the activity is first created. */
static boolean first_time=true;
ListView friend_list;
public static List<String> al;
public ArrayAdapter<String> aa;
String dummyfriends[]={"prashant","monika","pramod","dhara"};
public static MessengerDataSource mds;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* if(first_time==true)
{
first_time=false;
setContentView(R.layout.registration);
}
else */
setContentView(R.layout.main);
al=new ArrayList<String>();
for(String i:dummyfriends)
al.add(i);
aa=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, al);
friend_list=(ListView) findViewById(R.id.friend_list);
friend_list.setAdapter(aa);
mds= new MessengerDataSource(getApplicationContext());
mds.open();
System.out.println("I m in oncreate");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
al=mds.getFriends();
aa.notifyDataSetChanged();
System.out.println("I m in on resume function");
System.out.println("Value of arraylist in on resume fun"+al);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("I m in onpause function");
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater mi=getMenuInflater();
mi.inflate(R.menu.mainmenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case R.id.add_friend:
//Toast.makeText(this, "Add Friend", 2000).show();
Intent i=new Intent(VayuActivity.this,AddFriendActivity.class);
startActivity(i);
break;
case R.id.remove_friend:
Toast.makeText(this, "Remove Friend", 2000).show();
break;
}
return true;
}
}
package com.pdd.vayu;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class AddFriendActivity extends Activity implements OnClickListener{
EditText et;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.addfriend);
et=(EditText) findViewById(R.id.E_friendadd);
Button b=(Button) findViewById(R.id.add_friend_button);
b.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
String userid=et.getText().toString();
//VayuActivity.al.add(f);
Friend f=new Friend();
f.setUserid(userid);
f.setFname("pratik");
VayuActivity.mds.addFriend(f);
VayuActivity.al=(ArrayList<String>) VayuActivity.mds.getFriends();
System.out.println(VayuActivity.al);
//VayuActivity.aa.notifyDataSetChanged();
}
}
请帮助您必须尝试这样的notifyDataSetChanged方法 有时,当您没有在adpter中加载新数据时,它不会加载数据,所以在调用此函数之前,您必须在onresume方法中的arrayadpter中加载数据,而不是onCreate
public void refresh()
{
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
((EfficentAdapter)list.getAdapter()).notifyDataSetChanged();
}
}, 100);
}
要使notifyDataSetChanged正常工作,必须使用ArrayAdapter的add/remove方法(而不是实际列表)将对象添加到ArrayAdapter本身 你的简历应该是这样的:
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//al=mds.getFriends();
aa.clear();
aa.addAll(mds.getFriends());
aa.notifyDataSetChanged();
System.out.println("I m in on resume function");
System.out.println("Value of arraylist in on resume fun"+al);
}
ArrayAdapter在启动时创建列表的副本,因此在调用notifyDataSetChanged时,它只查看自己的副本,而不查看源列表 您必须在onresume的ArrayAddter中再次设置a1数据;在列表ArrayAdapter中,如果更改后的数据未重新插入adpter,则不会刷新,因此请像oncreate method aa=new ArrayAdapter这样尝试,android.R.layout.simple_List_item_1,al;我不明白。你能详细说明一下吗?
public void refresh()
{
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
((EfficentAdapter)list.getAdapter()).notifyDataSetChanged();
}
}, 100);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//al=mds.getFriends();
aa.clear();
aa.addAll(mds.getFriends());
aa.notifyDataSetChanged();
System.out.println("I m in on resume function");
System.out.println("Value of arraylist in on resume fun"+al);
}