我有一个自定义的适配器,我希望根据方向改变行布局。我有一个名为`setOrientation`的函数,在其中修改布局并调用`notifyDataSetChanged()`,希望一切都会被重置。不幸的是,似乎并不是这样,即使在调用`getView()`的第一次中,`notifyDataSetChanged()`之后,`convertView`仍然不为空,所以布局没有改变。有没有办法重置这个`convertView`?
public class TableRowsAdapter extends BaseAdapter {
private LayoutInflater layoutInflater;
private int layout;
private TableRow[] items;
private class ViewHolder {
/* some stuff */
}
public TableRowsAdapter(Context context, TableRow[] tableRowList)
{
super();
this.items = tableRowList;
this.layoutInflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
/* Set default layout to portrait */
layout = R.layout.table_row;
}
public void setOrientation(int orientation){
if(orientation== Configuration.ORIENTATION_LANDSCAPE){
layout = R.layout.table_row_land;
}
else{
layout = R.layout.table_row;
}
notifyDataSetChanged();
}
public int getCount()
{
return items.length;
}
public TableRow getItem(int position)
{
return items[position];
}
public long getItemId(int position)
{
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
View v = convertView;
if (v == null) {
v = layoutInflater.inflate(layout, parent, false);
holder = new ViewHolder();
/* some stuff */
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
TableRow item = getItem(position);
/* some stuff */
return v;
}
}
removeAllViews()
方法? - Mike M.