2

ListView にこのアダプターを使用します。

Appadapter extends ArrayAdapter<ResolveInfo> 
     private PackageManager pm=null;
     List<ResolveInfo> apps;
     AppAdapter(PackageManager pm, List<ResolveInfo> apps) {
    super(Launchalot.this, R.layout.row, apps);
  this.apps=apps;
  this.pm=pm;
}

@Override
public View getView(int position, View convertView,
                      ViewGroup parent) {
      Log.w(Launchalot.this.getPackageName(),"getView");
  if (convertView==null) {
    convertView=newView(parent);
  }

  bindView(position, convertView);

  return(convertView);
}

private View newView(ViewGroup parent) {
    Log.w(Launchalot.this.getPackageName(),"newView");
  return(getLayoutInflater().inflate(R.layout.row, parent, false));
}


private void bindView(int position, View row) {
  TextView label=(TextView)row.findViewById(R.id.label);
  Log.w(Launchalot.this.getPackageName(),"bindView");
  label.setText(getItem(position).loadLabel(pm));

  ImageView icon=(ImageView)row.findViewById(R.id.icon);

  icon.setImageDrawable(getItem(position).loadIcon(pm));
}
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
        setNotifyOnChange(true);}}

ListActivity クラスで次のコードを使用して、ビューにデータを入力します。

AppAdapter adapter=new AppAdapter(getPackageManager(), getResolveInfoList(0));
setListAdapter(adapter);

今、私は notifyDataSetChanged() を呼び出したリストアプリを変更しましたが、私が思うに、何も変わっていません。解決策を教えてください。ありがとう

4

2 に答える 2

8

この情報は、問題を確認して支援するにはまだ十分ではありません。そのため、での使用方法を簡単な例で説明しnotifyDataSetChanged();ますMyCustomAdapter。アダプタを設定する方法の例を次に示します。

private ArrayList<String> _names;
private MyCustomAdapter _adapter;
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    _names = new ArrayList<String>();

    for(int i = 0; i < _names.size();i++){
        _names.add("Element : "+i);
    }

    _adapter = new MyCustomAdapter(this, _names);
    _myListView.setAdapter(_adapter);


}

private void refreshListView(){
    _names.clear();
    for(int i = 0; i < _names.size();i++){
        _names.add("New Element : "+i);
    }
    _adapter.notifyDataSetChanged();
}

ここでの考え方はList、リストビューに入力するために使用しているものを変更することです。それをクリアし、新しいデータを入力してから、を呼び出しますnotifyDataSetChanged();

それで全部です。

于 2013-02-02T12:54:12.487 に答える
1

データセットに変更が加えられたと感じたら、これらの 2 行を短くすばやく呼び出します。

AppAdapter adapter=new AppAdapter(getPackageManager(), getResolveInfoList(0));
setListAdapter(adapter);
于 2013-02-02T12:52:20.933 に答える