【发布时间】:2012-01-12 06:57:54
【问题描述】:
我在主 Activity 中有一个自定义 BaseAdapter 和一个添加按钮。该按钮会打开一个带有文本框的对话框,您可以通过这种方式将新元素添加到列表中。问题是列表没有刷新。在 onActivityResult() 函数中,我打印列表中元素的数量,每次我在对话框中点击 OK 时,数量都会增加,所以我知道这只是刷新不起作用。我的 BaseAdapter 和我的活动:
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 convertView, ViewGroup list) {
View element;
if (convertView == null)
{
LayoutInflater inflater = context.getLayoutInflater();
element = inflater.inflate(R.layout.lista, null);
}
else element = convertView;
TextView elementLista=(TextView)element.findViewById(R.id.elementLista);
elementLista.setText(orase.get(position));
return element;
}
}
public class WeatherAppActivity extends ListActivity {
Button buton;
ListaOrase lista;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lista=new ListaOrase(this);
buton=(Button)findViewById(R.id.buton);
lista.add("Bucuresti");
lista.add("Sibiu");
setListAdapter(lista);
}
public void add(View view){
Intent intent=new Intent();
intent.setClass(this, Adauga.class);
startActivityForResult(intent, 0);
}
public void onActivityResult (int requestCode, int responseCode, Intent data){
System.out.println("Apelata");
if(responseCode==1){
lista.add(data.getStringExtra("oras")); // e chiar getText()
System.out.println(lista.getCount());
lista.notifyDataSetChanged();
}
}
}
如您所见,在对话框将新元素传递给主 Activity 之后,我在添加新元素(在 BaseAdapter 扩展类中)和方法 onActivityResult 时都尝试刷新(notifyDataSetChanged();)。我重复一遍,元素被添加到列表中,因为计数增加,它只是不刷新。
感谢您的回答!
【问题讨论】:
-
为什么不调用 setListAdapter(lista);在 OnActivityResult 中
-
它确实完成了这项工作,但项目为空。 LogCat 说该列表需要一个字符串,但它得到一个 SpannableString。那是什么,我怎样才能摆脱它?它是通过 Intent 从对话框中获取的。
-
我在我的答案中添加了一些代码,我更改了您的代码,修复了一些内容并使用数组适配器进行了简化,有几个小改动非常重要,希望对您有所帮助,让我来知道!
-
我现在遇到了完全相同的问题:但仅在我的 Android 4.2 设备上!我还扩展了 BaseAdapter - 每当内容发生变化时,我都会触发 notifyDataSetChanged。在 Android 4.3 和 4.4 甚至 2.1 上一切正常!在 notifyDataSetChanged 之后,通知 ListView 并为所有显示的元素调用 getView!但是在我的 4.2 设备上,notifyDataSetChanged 没有被调用一次!为什么?!?!?
标签: android listview baseadapter