如何在Android片段中添加具有列表视图和搜索功能的自定义对话框 [英] How to add a custom dialog with listview and search function in android fragment

查看:79
本文介绍了如何在Android片段中添加具有列表视图和搜索功能的自定义对话框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要创建如下所示的完全相同的视图,

I want to create exactly same view shown below,

我使用了showDialog功能来显示对话框.

I used showDialog function to display dialog.

private void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prev = getFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    // Create and show the dialog.
    DialogFragment newFragment = PopDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

帮我实现显示列表视图和搜索列表视图功能.

Help me to implement display listview and search listview function.

修改后的代码,

public class BookingFragment extends Fragment {

CardView cardFrom, cardTo;
TextView titleFromCity, titleToCity;
String[] nameOfCities;
    private Context context;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_bookings, container, false);
    titleFromCity = view.findViewById(R.id.textFromCity);
    titleToCity = view.findViewById(R.id.textToCity);
    cardFrom = view.findViewById(R.id.cardViewFrom);
    cardTo = view.findViewById(R.id.cardViewTo);
    cardFrom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle("Choose City");

            nameOfCities = getResources().getStringArray(R.array.cities);

            builder.setItems(nameOfCities, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    titleFromCity.setText(nameOfCities[which]);

            });

            AlertDialog dialog = builder.create();
            dialog.show();
        }
    });


    cardTo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            test();
        }
    });

    return view;
}

private void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prev = getFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    DialogFragment newFragment = PropDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

private void test() {
    final Dialog dialog_data = new Dialog(context);

    dialog_data.requestWindowFeature(Window.FEATURE_NO_TITLE);

    dialog_data.getWindow().setGravity(Gravity.CENTER);

    dialog_data.setContentView(R.layout.alert_label_editor);

    WindowManager.LayoutParams lp_number_picker = new WindowManager.LayoutParams();
    Window window = dialog_data.getWindow();
    lp_number_picker.copyFrom(window.getAttributes());

    lp_number_picker.width = WindowManager.LayoutParams.MATCH_PARENT;
    lp_number_picker.height = WindowManager.LayoutParams.WRAP_CONTENT;

    window.setGravity(Gravity.CENTER);
    window.setAttributes(lp_number_picker);

    TextView alertdialog_textview = (TextView) dialog_data.findViewById(R.id.alertdialog_textview);
    alertdialog_textview.setText("Search City");
    alertdialog_textview.setHint("Search");

    Button dialog_cancel_btn = (Button) dialog_data.findViewById(R.id.dialog_cancel_btn);
    dialog_cancel_btn.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if(dialog_data != null)
            {
                dialog_data.dismiss();
                dialog_data.cancel();
            }

        }
    });

    EditText filterText = (EditText) dialog_data.findViewById(R.id.alertdialog_edittext);
    ListView alertdialog_Listview = (ListView) dialog_data.findViewById(R.id.alertdialog_Listview);
    alertdialog_Listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    final ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_single_choice, nameOfCities);
    alertdialog_Listview.setAdapter(adapter);
    alertdialog_Listview.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id)
        {


            if(dialog_data != null)
            {
                dialog_data.dismiss();
                dialog_data.cancel();
            }
        }
    });

    filterText.addTextChangedListener(new TextWatcher()
    {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after)
        {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count)
        {

        }

        @Override
        public void afterTextChanged(Editable s)
        {
            adapter.getFilter().filter(s);
        }
    });

    dialog_data.show();
}

推荐答案

只需将此行替换为新行

旧版本--->最终对话框dialog_data =新对话框(上下文);

older one---> final Dialog dialog_data = new Dialog(context);

新对话框--->最终对话框dialog_data =新对话框(getActivity());

New one---> final Dialog dialog_data = new Dialog(getActivity());

这篇关于如何在Android片段中添加具有列表视图和搜索功能的自定义对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆