所以基本上我的想法是 2 ListViews
最初: 2个列表视图都是可见的,第一个是正确填充的,第二个是空但已经显示
点击第一行ListView之后:数据从数据库中获取并正确放入第二行
正在正确获取数据,但第二个ListView 仍然为空,并且根本不会调用 getView()。
1 - 有没有办法在不刷新页面的情况下加载第二个ListView ?
2 - 未调用getView(),因为该行不可见?我该如何绕过这个问题?
尝试使用 notifyDataSetChanged()然后验证第二个ListView
CustomAdapter.java
public class CustomAdapter extends ArrayAdapter<ListItem>
{
LayoutInflater inflater;
List<ListItem> items;
public CustomAdapter(Context context, int textViewResourceId, List<ListItem> items2) {
super(context, textViewResourceId);
this.items = items2;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items.size();
}
@Override
public ListItem getItem(int position) {
return ((CustomAdapter) items).getItem(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ListItem holder;
final ListItem item = items.get(position);
View vi=convertView;
if(vi==null){
vi = inflater.inflate(R.layout.popup_toping, null);
holder = new ListItem();
holder.text = (TextView) vi.findViewById(R.id.text);
holder.Check = (CheckBox) vi.findViewById(R.id.check);
vi.setTag(holder);
}else{
holder = (ListItem) vi.getTag();
}
holder.text.setText(item.t);
holder.Check.setChecked(item.IsChecked);
return vi;
}
}
在主要活动中实施
List<ListItem> items = new ArrayList<ListItem>();;
items.add(new ListItem(){{
t= c.getString("first_text");
IsChecked = false;
}});
CustomAdapter listadapter = new CustomAdapter(context, R.layout.popup, items);
myList.setAdapter(listadapter);
listadapter.notifyDataSetChanged();
myList.invalidate();
答案 0 :(得分:2)
我建议你考虑实施Fragments有几个原因......
- 片段有自己的生命周期
- 片段可以非常轻松地在同一个活动中进行通信
- 支持平板电脑良好用户界面的最佳做法
醇>
因此,如果您有ListFragment A和Fragment B,则可以在“ListFragment B”上创建一个侦听器,以便在ListFragment A上选择一个项目时,将使用您的规范填充Fragment B.我想这会帮到你很多。请看本文第10部分中的这个示例: http://www.vogella.com/articles/AndroidFragments/article.html
答案 1 :(得分:1)
经过长时间的调试和挫折,我终于解决了我的问题..
问题:我在 AsyncTask
中的 doInBackground 中设置了适配器解决方案:我在 onPostExecute 中设置了适配器,它解决了我的问题..显然它以某种方式干扰了自定义适配器..
如果有人能解释原因,我真的很感激..
非常感谢那些试图帮助我的人:)