1

こんにちは、私は Android の初心者です。ListAdapter を含むアプリを開発していますが、onResume からクリアしたいと考えています。

in Activity は、levelsView を指します。

public class MyActivity extends Activity{
                  ...


@Override
    protected void onResume(){
        super.onResume();
        levelsView.onResume();
    }
}

LevelsView は、myAdapter がある FontsSelect を参照します

public class FontsSelect extends LinearLayout {
private List<FontLevels> fontsLevels;

public FontsSelect(Context context, AttributeSet attr, int defStyle){
        super(context, attr, defStyle);
        inflate(context, R.layout.list_view_of_fonts, this);

        listViewFonts = (ListView)findViewById(R.id.list_of_fonts);
        listViewFonts.setDivider(null);
        fontsLevels = new ArrayList<FontLevels>();
        levels = new ArrayList<Level>();
        createLevels();
        myAdapter = new MyAdapter(context);
        listViewFonts.setOnItemClickListener(levelSelectListener);
        listViewFonts.setAdapter(myAdapter);

    }

 public void createLevels(){
    ...
 fontsLevels.add(new FontLevels(context,  "fonts/TNR.ttf"))}

class  MyAdapter extends BaseAdapter {

        final LayoutInflater inflater;

        public MyAdapter(Context context){
            inflater = LayoutInflater.from(context);
        }
        @Override
        public int getCount() {
            return fontsLevels.size();
        }

        @Override
        public Object getItem(int position) {
            return fontsLevels.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;  
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            if(convertView == null){
                convertView = inflater.inflate(R.layout.item_level, parent, false);
                holder = new ViewHolder((TextView)convertView.findViewById(R.id.level_name_typeface), (TextView)convertView.findViewById(R.id.level_score_number));
                convertView.setTag(holder);
            }
            else {
                holder = (ViewHolder)convertView.getTag();
            }

            ...


            return convertView;
        }



    }

public void onResume(){
        listViewFonts.setAdapter(null);
        fontsLevels.clear();
        fontsLevels.add(new FontLevels(context,  "fonts/TNR.ttf");
        fontsLevels.add(new FontLevels(context,  "fonts/TNR.ttf");
        myAdapter = new MyAdapter(getContext(), fontsLevels);
        listViewFonts.setAdapter(myAdapter);
        myAdapter.notifyDataSetChanged();

    }
}

これがckassのFontLevelです

public class FontLevels{
private String fontFullName;
    private int _id;
    private List<Level> easyLevels;
    private List<Level> hardLevels;

public FontLevels(Context context, String fontFullName){
        this.fontFullName = fontFullName;
        typeface = Typeface.createFromAsset(context.getAssets(), FONTS_DIR + fontFullName);
        easyLevels =  new ArrayList<Level>(levelNumber);
        hardLevels = new ArrayList<Level>(levelNumber);
}

アプリを再起動した後、アダプターが更新されず、古いリストが表示されます。助けてください))ありがとう!!!

4

3 に答える 3

0

notifydatasetchanged()adapter.add()/adapter.clear()/adapter.remove()メソッドを使用して、アダプターによって提示されている基礎となるデータ構造を変更する場合にのみ、ビューを更新します。

基になるデータ構造を直接変更する場合は、新しいデータ構造を渡してアダプターを再インスタンス化し、ビュー アダプターを再設定する必要があります。

私は自分のコードでこの問題を発見し、アダプターを再インスタンス化することで修正しました。

-- 更新 -- 追加してみる

myAdapter = new MyAdapter();
listViewFonts.setAdapter(myAdapter);

onResume() に、アダプターの「新しい」インスタンスを再作成し、リストビュー用に設定します

于 2013-08-06T15:42:17.423 に答える