adapter.notifyDataSetChanged()不更新我的适配器

时间:2012-03-19 17:24:50

标签: android

这是我的代码:

public class ListasCompra extends ListActivity {

private ArrayList<Lista> listaCompras = null;
private ListaAdapter adaptador = null;

private static ListasCompra instancia = null;
private static Context context = null;

private Button aceptar = null;
private Button nueva = null;

@Override
public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    setContentView(R.layout.lista_de_listas);

    listaCompras = LocalService.getDbListas().getListas();

    aceptar = (Button)findViewById(R.id.aceptarlistas);
    aceptar.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            finish();
        }
    });

    nueva = (Button)findViewById(R.id.nuevalistas);
    nueva.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            startActivity(new Intent(context, NuevaLista.class));
            //finish();
        }
    });

    if(listaCompras!=null){
        adaptador = new ListaAdapter(this, listaCompras);
        setListAdapter(adaptador);
    }else{
        listaCompras = new ArrayList<Lista>();
        adaptador = new ListaAdapter(this, listaCompras);
        setListAdapter(adaptador);
    }

    context = this;
    instancia = this;
}

/**
 * Ciclo Vida de Actividad
 */

@Override
public void onDestroy(){
    super.onDestroy();
}

@Override
public void onResume(){
    super.onResume();
    listaCompras = LocalService.getDbListas().getListas();
    adaptador = new ListaAdapter(context, listaCompras);
    adaptador.notifyDataSetChanged();
}

我想要的是,每次进入方法“onResume”时都要更新适配器,这是每次为用户重新显示活动......

我的问题是它没有使用这种方法更新,任何人都知道为什么??

谢谢!

2 个答案:

答案 0 :(得分:1)

每次恢复活动时都不要创建适配器。在onCreate()中创建一次,然后在notifyDataSetChanged()中调用onResume()

但是,您最大的问题是,您正在onResume()中创建一个新的适配器,并且永远不会将它附加到ListView!如果您必须按原样保留代码,请在setListAdapter(adaptador)

中创建新适配器后添加onResume()

答案 1 :(得分:1)

onCreate(...)你这样做......

adaptador = new ListaAdapter(this, listaCompras);
setListAdapter(adaptador);

在执行此操作时,您要传递对ListView的引用 - 该引用是对ListAdapter调用所创建的new...的引用。

onResume()你这样做......

adaptador = new ListaAdapter(context, listaCompras);
adaptador.notifyDataSetChanged();

...现在adaptador对新ListAdapter有了新的引用,但ListView本身仍在维护对您在ListAdapter中实例化的第一个onCreate(...)的引用{1}}。

最简单的方法是完全删除onCreate(...)中的代码,然后让onResume()处理创建ListAdapter并调用setListAdapter(...)