Android 对notifyDataSetChanged的回调

Android 对notifyDataSetChanged的回调,android,listview,dialog,fragment,Android,Listview,Dialog,Fragment,我在DialogFragment中实现了一个listview。每个项目都有一个带有选择器的文本视图,用于模拟一个无线组,并具有一次只选择一个项目的选项。 问题是当用户单击一个项目时,我正在更新适配器上的数据,然后调用notifydatasetchange()并调用dialog.dismise()。 在对话框关闭之前,用户看不到项目的选择。 我通过添加postdelay来消除功能来解决这个问题,也许有更好的解决方案 这是我的代码: public class SettingsPopupAdapter

我在DialogFragment中实现了一个listview。每个项目都有一个带有选择器的文本视图,用于模拟一个无线组,并具有一次只选择一个项目的选项。 问题是当用户单击一个项目时,我正在更新适配器上的数据,然后调用
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(_项);
}