3

したがって、基本的な考え方は、2 つの ListViewがあるということです。

最初: 2 つのリストビューが両方とも表示されます。最初のリストビューには適切に入力され、2 番目のリストビューは空ですが、既に表示されています

最初の ListView の行をクリックした後:データはデータベースから取得され、2 番目のリストに適切に配置されます。

質問と問題:

データは適切にフェッチされていますが、2 番目の ListViewは空のままで、getView()はまったく呼び出されません。

1-ページを更新せずに2番目のListViewをロードする方法はありますか?

2-行が正しく表示されないため、getView() は呼び出されませんか? どうすればこの問題を回避できますか?

notifyDataSetChanged ()を使用してから、 2 番目の 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

いくつかの理由から、フラグメントの実装を検討することをお勧めします...

  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 に答える