Android 对notifyDataSetChanged的回调
我在DialogFragment中实现了一个listview。每个项目都有一个带有选择器的文本视图,用于模拟一个无线组,并具有一次只选择一个项目的选项。 问题是当用户单击一个项目时,我正在更新适配器上的数据,然后调用Android 对notifyDataSetChanged的回调,android,listview,dialog,fragment,Android,Listview,Dialog,Fragment,我在DialogFragment中实现了一个listview。每个项目都有一个带有选择器的文本视图,用于模拟一个无线组,并具有一次只选择一个项目的选项。 问题是当用户单击一个项目时,我正在更新适配器上的数据,然后调用notifydatasetchange()并调用dialog.dismise()。 在对话框关闭之前,用户看不到项目的选择。 我通过添加postdelay来消除功能来解决这个问题,也许有更好的解决方案 这是我的代码: public class SettingsPopupAdapter
notifydatasetchange()
并调用dialog.dismise()
。
在对话框关闭之前,用户看不到项目的选择。
我通过添加postdelay来消除功能来解决这个问题,也许有更好的解决方案
这是我的代码:
public class SettingsPopupAdapter extends BaseAdapter
{
private List<SettingsItem> _data;
private Context _con;
public SettingsPopupAdapter(Context con, List<SettingsItem> data)
{
_con = con;
_data = data;
}
@Override
public int getCount()
{
return _data.size();
}
@Override
public SettingsItem getItem(int position)
{
return _data.get(position);
}
@Override
public long getItemId(int position)
{
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if (convertView == null)
{
holder = new ViewHolder();
convertView = LayoutInflater.from(_con).inflate(R.layout.settings_popup_checkbox_row_item, parent, false);
holder._text = (TextView) convertView.findViewById(R.id.option_text);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
SettingsItem item = getItem(position);
holder._text.setText(item.getItemLabel());
holder._text.setSelected(item.isSelected());
return convertView;
}
private static class ViewHolder
{
public TextView _text;
}
public String getSelectedItem()
{
String selectedItem = null;
for (SettingsItem item : _data)
{
if (item.isSelected())
{
selectedItem = item.getItemLabel();
break;
}
}
return selectedItem;
}
public List<String> getSelectedItems()
{
List<String> selectedOptions = new ArrayList<String>();
for (SettingsItem item : _data)
{
if (item.isSelected())
{
selectedOptions.add(item.getItemLabel());
}
}
return selectedOptions;
}
public void setData(ArrayList<SettingsItem> items)
{
_data = items;
notifyDataSetChanged();
}
}
公共类设置PopupAdapter扩展BaseAdapter
{
私有列表数据;
私人背景;
公共设置PopupAdapter(上下文con,列表数据)
{
_con=con;
_数据=数据;
}
@凌驾
public int getCount()
{
返回_data.size();
}
@凌驾
公共设置sitem getItem(内部位置)
{
返回_data.get(位置);
}
@凌驾
公共长getItemId(int位置)
{
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视窗座;
if(convertView==null)
{
holder=新的ViewHolder();
convertView=LayoutFlater.from(_con).充气(R.layout.settings\u popup\u checkbox\u row\u item,parent,false);
holder.\u text=(TextView)convertView.findViewById(R.id.option\u text);
convertView.setTag(支架);
}
其他的
{
holder=(ViewHolder)convertView.getTag();
}
设置sitem item=getItem(位置);
holder._text.setText(item.getItemLabel());
持有人._text.setSelected(item.isSelected());
返回视图;
}
私有静态类视图持有者
{
公共文本视图_text;
}
公共字符串getSelectedItem()
{
字符串selectedItem=null;
对于(设置站点项目:_数据)
{
if(item.isSelected())
{
selectedItem=item.getItemLabel();
打破
}
}
返回selectedItem;
}
公共列表getSelectedItems()
{
List selectedOptions=new ArrayList();
对于(设置站点项目:_数据)
{
if(item.isSelected())
{
选择Options.add(item.getItemLabel());
}
}
返回所选选项;
}
公共void setData(ArrayList项)
{
_数据=项目;
notifyDataSetChanged();
}
}
此代码位于打开对话框的片段中:
private SettingsPopupAdapte _modAdapter;
private ArrayList<SettingsItem> _items;
_modAdapter = new SettingsPopupAdapter(getActivity(),_items);
_modificationListView.setAdapter(_modAdapter);
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
String selectedItem = _items.get(position).getItemLabel();
selectExclusiveList(selectedItem);
Bundle b = new Bundle();
b.putInt(Consts.MODIFICATION_TYPE_KEY, _type);
b.putString(Consts.RESPONSE_DATA_KEY,selectedItem);
_listener.onRetrieveData(b);
//show the change before the dialog dismissed
getView().postDelayed(new Runnable()
{
@Override
public void run()
{
dismiss();
}
},200);
}
private void selectExclusiveList(String selectedItem)
{
for (SettingsItem item : _items)
{
item.setSelected(false);
if (item.getItemLabel().equals(selectedItem))
{
item.setSelected(true);
}
}
_modAdapter.setData(_items);
}
private SettingsPopupAdapte\u modAdapter;
私有数组列表项;
_modAdapter=new SettingsPopupAdapter(getActivity(),_项);
_modificationListView.setAdapter(_modAdapter);
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
字符串selectedItem=_items.get(position.getItemLabel();
selectExclusiveList(selectedItem);
Bundle b=新Bundle();
b、 putInt(常数修改类型、键、类型);
b、 putString(常量响应\数据\键,selectedItem);
_侦听器。onRetrieveData(b);
//在对话框关闭之前显示更改
getView().postDelayed(新的Runnable())
{
@凌驾
公开募捐
{
解雇();
}
},200);
}
私有void selectExclusiveList(字符串selectedItem)
{
对于(设置站点项目:\u项目)
{
项目1.1(假);
if(item.getItemLabel().equals(selectedItem))
{
项目.已选择(正确);
}
}
_modAdapter.setData(_项);
}