6

我正在尝试创建一个 DialogFragment,它显示一个内部带有自定义 ListView 的对话框。

public class MultiSelectDialogCustom extends DialogFragment {


    ListView mLocationList;
    private ArrayList<String> mOfficeListItems = new ArrayList<String>();


    public static MultiSelectDialogCustom newInstance(int title) {
        MultiSelectDialogCustom dialog = new MultiSelectDialogCustom();
        Bundle args = new Bundle();
        args.putInt("title", title);
        dialog.setArguments(args);
        return dialog;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        Collections.addAll(mOfficeListItems, getResources().getStringArray(R.array.offices)); 
        View v = inflater.inflate(R.layout.fragment_choice_list, container,
                true);

        mLocationList = (ListView)v.findViewById(R.id.location_criteria_list);

        final FunctionListArrayAdapter adapter = new FunctionListArrayAdapter(
                this, android.R.layout.simple_list_item_1, mOfficeListItems);
        mLocationList.setAdapter(adapter);

        getDialog().setTitle(getArguments().getInt("title"));

        return v;
    }


}

从片段调用它时:

MultiSelectDialogCustom dialogFrag = MultiSelectDialogCustom_.newInstance(R.string.dialog_title);
dialogFrag.show(getActivity().getSupportFragmentManager(), null);

它只显示一个带有标题的空白对话框......为什么我的列表没有显示?

4

3 回答 3

12

而不是使用onCreateView你应该是覆盖onCreateDialog它的内部,它看起来像:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Collections.addAll(mOfficeListItems, getResources().getStringArray(R.array.offices)); 
    View v = getActivity().getLayoutInflater().inflate(R.layout.fragment_choice_list, null);

    mLocationList = (ListView)v.findViewById(R.id.location_criteria_list);

    final FunctionListArrayAdapter adapter = new FunctionListArrayAdapter(
            this, android.R.layout.simple_list_item_1, mOfficeListItems);
    mLocationList.setAdapter(adapter);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    builder.setTitle(getArguments().getInt("title")).setView(v);

    return builder.create();
}

DialogFragment 文档页面中的这句话描述了您要执行的操作:

实现应覆盖此类并实现onCreateView(LayoutInflater, ViewGroup, Bundle)以提供对话框的内容。或者,他们可以覆盖onCreateDialog(Bundle)以创建一个完全自定义的对话框,例如一个AlertDialog具有自己内容的对话框。

就您而言,这似乎onCreateDialog是要走的路,因为您想做自定义内部视图。

于 2013-12-03T16:19:03.490 回答
0

可能是你错过了一些非常小但很重要的东西。您缺少notifyDataSetChanged()适配器吗?

“一旦您将新项目添加到适配器,您必须调用notifyDataSetChanged(),以便listview使用适配器中找到的新数据集刷新自身。”

于 2013-12-03T16:29:12.143 回答
0

我忘记的是:

view.setAdapter(adapter);

在我添加代码有效之后

于 2016-11-10T22:10:36.770 回答