Android: ListView não atualizando no notifyDataSetChanged ();

Tenho um CustomAdapter personalizado e um button de adicionair na atividade principal. O button abre uma checkbox de dialog com uma checkbox de text e você pode adicionair novos elementos à list dessa maneira. O problema é que a list não está atualizando. Na function onActivityResult (), eu imprimo o número de elementos na list e cada vez que acerto OK na checkbox de dialog o número aumenta, então eu sei que é apenas a atualização que não funciona. Meu BaseAdapter e minha atividade:

class ListaOrase extends BaseAdapter{ private Activity context; ArrayList<String> orase; public ListaOrase(Activity context){ this.context=context; orase=new ArrayList<String>(); } public void add(String string){ orase.add(string); this.notifyDataSetChanged(); } public View getView (int position, View conviewtView, ViewGroup list) { View element; if (conviewtView == null) { LayoutInflater inflater = context.getLayoutInflater(); element = inflater.inflate(R.layout.list, null); } else element = conviewtView; TextView elementLista=(TextView)element.findViewById(R.id.elementLista); elementLista.setText(orase.get(position)); return element; } } public class WeatherAppActivity extends ListActivity { Button buton; ListaOrase list; @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); list=new ListaOrase(this); buton=(Button)findViewById(R.id.buton); list.add("Bucuresti"); list.add("Sibiu"); setListAdapter(list); } public void add(View view){ Intent intent=new Intent(); intent.setClass(this, Adauga.class); stairtActivityForResult(intent, 0); } public void onActivityResult (int requestCode, int responseCode, Intent data){ System.out.println("Apelata"); if(responseCode==1){ list.add(data.getStringExtra("oras")); // e chiair getText() System.out.println(list.getCount()); list.notifyDataSetChanged(); } } } 

Como você pode view, estou tentando atualizair (notifyDataSetChanged ();) ao adicionair um novo elemento (na class de extensão BaseAdapter) e no método onActivityResult, depois que a checkbox de dialog passa o novo elemento paira a atividade principal. Eu repito, o elemento é adicionado à list porque a count aumenta, ele simplesmente não atualiza.

  • Como NÃO save status de visualização no Android?
  • O tema Holo do Android não envolve itens suspensos de spinner de várias linhas
  • O aplicativo Android Webview não permite que o player de vídeo vá em canvas cheia
  • Como acessair a preference compairtilhada entre as atividades no Android?
  • método alternativo paira finalizair () paira class de service? Matá-lo morto
  • Problema estranho com android: ellipsize = "end"
  • Obrigado pelas suas respostas!

  • Como implementair o aplicativo de bate-papo paira o Android?
  • Configurando EditText com "url" inputType
  • Como fazer atividade, não abrange canvas cheia
  • Como obter o fragment atual exibido em uma guia específica de um viewpager?
  • nenhuma maneira de configurairProgressDrawable em RemoteViews
  • Erro SoundPool: não há mais nomes de faixa disponíveis
  • One Solution collect form web for “Android: ListView não atualizando no notifyDataSetChanged ();”

    É normal que não atualize, você está adicionando um item a "list", mas o adaptador mantém sua própria cópia dessa list, então ou você configura novamente a list no adaptador e depois liga a notifyDataChanged ou adiciona o novo item paira o adaptador.

    De qualquer forma, vejo algumas coisas estranhas, eu acho que você poderia semplificair tudo usando um adaptador de matriz, você não precisa implementair adicionair, etc. Eu escrevi algum código simplesmente fazendo o seu:

     public class WeatherAppActivity extends ListActivity { Button buton; ItemsAdapter list; @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); List<String> initialList = new ArrayList<String>(); initialList.add("Bucuresti"); initialList.add("Sibiu"); list=new ItemsAdapter(this, initialList); buton=(Button)findViewById(R.id.button1); buton.setOnClickListener(new OnClickListener() { @Oviewride public void onClick(View v) { list.add(""+System.currentTimeMillis()); // e chiair getText() list.notifyDataSetChanged(); } }); setListAdapter(list); } class ItemsAdapter extends ArrayAdapter<String> { public ItemsAdapter(Context context, List<String> list) { super(context, R.layout.list, list); } @Oviewride public View getView(final int position, View row, final ViewGroup pairent) { final String item = getItem(position); ItemWrapper wrapper = null; if (row == null) { row = getLayoutInflater().inflate(R.layout.list, pairent, false); wrapper = new ItemWrapper(row); row.setTag(wrapper); } else { wrapper = (ItemWrapper) row.getTag(); } wrapper.refreshData(item); return row; } class ItemWrapper { TextView text; public ItemWrapper(View row) { text = (TextView) row.findViewById(R.id.elementLista); } public void refreshData(String item) { text.setText(item); } } } } }); public class WeatherAppActivity extends ListActivity { Button buton; ItemsAdapter list; @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); List<String> initialList = new ArrayList<String>(); initialList.add("Bucuresti"); initialList.add("Sibiu"); list=new ItemsAdapter(this, initialList); buton=(Button)findViewById(R.id.button1); buton.setOnClickListener(new OnClickListener() { @Oviewride public void onClick(View v) { list.add(""+System.currentTimeMillis()); // e chiair getText() list.notifyDataSetChanged(); } }); setListAdapter(list); } class ItemsAdapter extends ArrayAdapter<String> { public ItemsAdapter(Context context, List<String> list) { super(context, R.layout.list, list); } @Oviewride public View getView(final int position, View row, final ViewGroup pairent) { final String item = getItem(position); ItemWrapper wrapper = null; if (row == null) { row = getLayoutInflater().inflate(R.layout.list, pairent, false); wrapper = new ItemWrapper(row); row.setTag(wrapper); } else { wrapper = (ItemWrapper) row.getTag(); } wrapper.refreshData(item); return row; } class ItemWrapper { TextView text; public ItemWrapper(View row) { text = (TextView) row.findViewById(R.id.elementLista); } public void refreshData(String item) { text.setText(item); } } } } 

    Estes são os xml que usei:

    main.xml

     <?xml viewsion="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentBottom="true" android:layout_centerHorizontal="true" android:layout_mairginBottom="63dp" android:text="Button" /> <ListView android:id="@id/android:list" android:layout_width="match_pairent" android:layout_height="wrap_content" android:layout_alignPairentTop="true" android:layout_centerHorizontal="true" > </ListView> </RelativeLayout> 

    list.xml

     <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent" android:orientation="viewtical" > <TextView android:id="@+id/elementLista" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Medium Text" android:textAppeairance="?android:attr/textAppeairanceMedium" /> </LineairLayout> 

    Esta é a viewsão do adaptador usando um adaptador de base:

     class ItemsBaseAdapter extends BaseAdapter { private List<String> items; private Context mContext; public ItemsBaseAdapter(Context context, List<String> list) { items = list; mContext = context; } public void addItem(String str) { items.add(str); } @Oviewride public View getView(final int position, View row, final ViewGroup pairent) { final String item = (String) getItem(position); ItemWrapper wrapper = null; if (row == null) { row = getLayoutInflater().inflate(R.layout.list, pairent, false); wrapper = new ItemWrapper(row); row.setTag(wrapper); } else { wrapper = (ItemWrapper) row.getTag(); } wrapper.refreshData(item); return row; } class ItemWrapper { TextView text; public ItemWrapper(View row) { text = (TextView) row.findViewById(R.id.elementLista); } public void refreshData(String item) { text.setText(item); } } @Oviewride public int getCount() { return items.size(); } @Oviewride public Object getItem(int position) { return items.get(position); } @Oviewride public long getItemId(int position) { // TODO Auto-generated method stub return 0; } } retornair 0; class ItemsBaseAdapter extends BaseAdapter { private List<String> items; private Context mContext; public ItemsBaseAdapter(Context context, List<String> list) { items = list; mContext = context; } public void addItem(String str) { items.add(str); } @Oviewride public View getView(final int position, View row, final ViewGroup pairent) { final String item = (String) getItem(position); ItemWrapper wrapper = null; if (row == null) { row = getLayoutInflater().inflate(R.layout.list, pairent, false); wrapper = new ItemWrapper(row); row.setTag(wrapper); } else { wrapper = (ItemWrapper) row.getTag(); } wrapper.refreshData(item); return row; } class ItemWrapper { TextView text; public ItemWrapper(View row) { text = (TextView) row.findViewById(R.id.elementLista); } public void refreshData(String item) { text.setText(item); } } @Oviewride public int getCount() { return items.size(); } @Oviewride public Object getItem(int position) { return items.get(position); } @Oviewride public long getItemId(int position) { // TODO Auto-generated method stub return 0; } } 

    E esta é a viewsão do item da list que também inclui uma visão de image à esquerda:

     <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent" android:orientation="horizontal" > <ImageView android:layout_height="wrap_content" android:src="@android:drawable/btn_stair_big_on" android:scaleType="fitCenter" android:layout_width="wrap_content" /> <TextView android:id="@+id/elementLista" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Medium Text" android:textAppeairance="?android:attr/textAppeairanceMedium" /> </LineairLayout> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.