3

所以基本上我的想法是我有2 个 ListViews

最初:两个列表视图都是可见的,第一个正确填充,第二个为但已显示

单击第一个 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();
4

2 回答 2

2

我建议您考虑实施 Fragments 有几个原因......

  1. 片段有自己的生命周期
  2. 片段可以很容易地在同一个活动中进行通信
  3. 支持平板电脑良好 UI 的最佳实践

在此处输入图像描述

因此,如果您有 ListFragment A 和 Fragment B,您可以在“ListFragment B”上创建一个侦听器,以便在 ListFragment A 上选择项目时,Fragment B 会填充您的规范。我想这会对你有很大帮助。查看本文第 10 节中的此示例: http ://www.vogella.com/articles/AndroidFragments/article.html

于 2013-08-26T04:47:35.607 回答
1

经过长时间的调试和挫折,我终于解决了我的问题..

问题:我在AsyncTask的doInBackground中设置了适配器

解决方案:我在onPostExecute中设置了适配器,它解决了我的问题..显然它以某种方式干扰了自定义适配器..

如果有人能解释为什么,我真的很感激..

非常感谢那些试图帮助我的人:)

于 2013-08-28T00:31:43.020 回答