大家好,我是Android新手。我正在开发包含ListAdapter的应用程序,我想从onResume中清除它。
Activity中的指的是levelsView。
public class MyActivity extends Activity{
...
@Override
protected void onResume(){
super.onResume();
levelsView.onResume();
}
}
LevelsView指的是FontsSelect,其中包含myAdapter
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);
}
重启我的应用后,适配器不会更新,并显示旧列表。 请帮忙)) 感谢名单!!!
答案 0 :(得分:0)
This post指出问题并描述所有可能的解决方案
答案 1 :(得分:0)
notifydatasetchanged()
方法用于修改适配器呈现的基础数据结构,则 adapter.add()/adapter.clear()/adapter.remove()
仅更新视图。
如果要直接修改基础数据结构,则需要重新实现传递新数据结构的适配器并重新设置视图适配器。
我在自己的代码中发现了这个问题并重新安装适配器修复了它。
- 更新 - 尝试添加
myAdapter = new MyAdapter();
listViewFonts.setAdapter(myAdapter);
到onResume()重新创建适配器的“新”实例并为listview设置它
答案 2 :(得分:-1)
以下为我清除了ListView
:
listview.removeAllViewsInLayout();
listview.removeAllViewsFromAdapter();
listview.setAdapter(null);
listview.refreshDrawableState();
listview.removeViews(0, listview.getChildCount());