如何在android fragment中添加带有listview和搜索功能的自定义对话框

如何在android fragment中添加带有listview和搜索功能的自定义对话框,android,listview,android-fragments,Android,Listview,Android Fragments,我想创建与下图完全相同的视图 我使用了showDialog函数来显示对话框 private void showDialog() { FragmentTransaction ft = getFragmentManager().beginTransaction(); Fragment prev = getFragmentManager().findFragmentByTag("dialog"); if (prev != null) { ft.remove(p

我想创建与下图完全相同的视图

我使用了
showDialog
函数来显示对话框

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");
}
帮助我实现显示listview和搜索listview功能

编辑代码

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();
}
公共类BookingFragment扩展了片段{
CardView cardFrom、cardTo;
TextView titleFromCity,titleToCity;
字符串[]城市名称;
私人语境;
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u预订,容器,错误);
titleFromCity=view.findViewById(R.id.textFromCity);
titleToCity=view.findviewbyd(R.id.textToCity);
cardFrom=view.findviewbyd(R.id.cardwiewfrom);
cardTo=view.findViewById(R.id.cardViewTo);
cardFrom.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
AlertDialog.Builder=新建AlertDialog.Builder(getActivity());
建筑商名称(“选择城市”);
nameOfCities=getResources().getStringArray(R.array.cities);
setItems(城市名称,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
titleFromCity.setText(城市名称[其中]);
});
AlertDialog=builder.create();
dialog.show();
}
});
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
test();
}
});
返回视图;
}
私有void showDialog(){
FragmentTransaction ft=getFragmentManager().beginTransaction();
Fragment prev=getFragmentManager().findFragmentByTag(“对话框”);
如果(上一个!=null){
ft.remove(上一个);
}
ft.addToBackStack(空);
DialogFragment newFragment=PropDialogFragment.newInstance();
newFragment.show(ft,“dialog”);
}
专用无效测试(){
最终对话框\数据=新对话框(上下文);
对话框\u数据.requestWindowFeature(窗口.功能\u无\u标题);
对话框_data.getWindow().setGravity(Gravity.CENTER);
对话框\u data.setContentView(R.layout.alert\u label\u编辑器);
WindowManager.LayoutParams lp_number_picker=新建WindowManager.LayoutParams();
Window Window=dialog_data.getWindow();
lp_number_picker.copyFrom(window.getAttributes());
lp_number_picker.width=WindowManager.LayoutParams.MATCH_父项;
lp_number_picker.height=WindowManager.LayoutParams.WRAP_CONTENT;
设置重力(重心);
设置属性(lp\U编号\U选择器);
TextView alertdialog\u TextView=(TextView)dialog\u data.findViewById(R.id.alertdialog\u TextView);
alertdialog_textview.setText(“搜索城市”);
alertdialog_textview.setHint(“搜索”);
按钮对话框\u取消\u btn=(按钮)对话框\u数据.findViewById(R.id.dialog\u取消\u btn);
对话框\u取消\u btn.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
如果(对话框数据!=null)
{
对话框_data.disclose();
对话框_data.cancel();
}
}
});
EditText filterText=(EditText)对话框\u data.findViewById(R.id.alertdialog\u EditText);
ListView alertdialog\u ListView=(ListView)dialog\u data.findViewById(R.id.alertdialog\u ListView);
alertdialog_Listview.setChoiceMode(Listview.CHOICE_MODE_SINGLE);
最终ArrayAdapter=新的ArrayAdapter(上下文、android.R.layout.simple\u list\u item\u single\u选项、城市名称);
alertdialog_Listview.setAdapter(适配器);
alertdialog_Listview.setOnItemClickListener(新的AdapterView.OnItemClickListener()
{
@凌驾
公共视图单击(适配器视图a、视图v、内部位置、长id)
{
如果(对话框数据!=null)
{
对话框_data.disclose();
对话框_data.cancel();
}
}
});
filterText.addTextChangedListener(新的TextWatcher()
{
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after)
{
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count)
{
}
@凌驾
公共无效后文本已更改(可编辑)
{
adapter.getFilter().filter;
}
});
对话框_data.show();
}

final Dialog\u data=新建对话框(上下文);
对话框\u数据.requestWindowFeature(窗口.功能\u无\u标题);
对话框_data.getWindow().setGravity(Gravity.CENTER);
dialog_data.setContentView(R.layout.custom_alertdialog);
WindowManager.LayoutParams lp_number_picker=新建WindowManager.LayoutParams();
Window Window=dialog_data.getWindow();
lp_number_picker.copyFrom(window.getAttributes());
lp_number_picker.width=WindowManager.LayoutParams.MATCH_父项;
lp_number_picker.height=WindowManager.LayoutParams.WRAP_CONTENT;
设置重力(重心);
设置属性(lp\U编号\U选择器);
TextView alertdialog\u TextView=(TextView)dialog\u data.findViewById(R.id.alertdialog\u TextView);
alertdialog_textview.setText(所选字符串);
alertdialog_textview.setHint(所选字符串);
按钮对话框\u取消\u btn=(按钮)对话框\u数据.findViewById(R.id.dialog\u取消\u btn);
对话框\u取消\u btn.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
如果(对话框数据!=null)
{
对话框_data.disclose();
对话框_data.cancel();
}
}
});
EditText filterText=(EditText)对话框\u data.findViewById(R.id.alertdialog\u EditText);
ListView alertdialog\u ListView=(ListView)dialog\u data.findViewById(R.id.aler
    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.custom_alertdialog);

    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(selected_string);
    alertdialog_textview.setHint(selected_string);

    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, array_data);
    alertdialog_Listview.setAdapter(adapter);
    alertdialog_Listview.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id)
        {
            Utility.hideKeyboard(context,v);


 //data.setText(String.valueOf(a.getItemAtPosition(position)));


            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();

custom_alertdialog.xml

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/alertdialog_linearlayout"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="@null">

<LinearLayout
  android:layout_height="wrap_content"
  android:layout_width="match_parent"
  android:orientation="vertical"
  android:layout_marginTop="20dp"
  android:background="#FFFFFF">

  <TextView
      android:id="@+id/alertdialog_textview"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="search"
      android:textColor="#000000"
      android:textSize="16sp"
      android:layout_marginTop="220dp"
      android:layout_marginLeft="20dp"
      android:layout_marginStart="20dp"
      android:layout_marginRight="20dp"
      android:layout_marginEnd="20dp"
      android:gravity="center"
      android:drawableLeft="@drawable/ic_launcher"
      android:drawableStart="@drawable/ic_launcher"
      android:drawablePadding="10dp"/>

  <EditText
      android:id="@+id/alertdialog_edittext"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:ellipsize="end"
      android:textStyle="normal"
      android:textColorHint="#939598"
      android:textColor="#4b4f54"
      android:layout_marginLeft="20dp"
      android:layout_marginStart="20dp"
      android:layout_marginRight="20dp"
      android:layout_marginEnd="20dp"
      android:layout_marginTop="10dp"
      android:layout_marginBottom="10dp"
      android:maxLines="1"
      android:textCursorDrawable="@null"
      android:gravity="start"
      android:inputType="text"
      android:theme="@style/alertdialog_edittextTheme"
      android:layout_gravity="start" />

  <ListView
      android:id="@+id/alertdialog_Listview"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_marginLeft="20dp"
      android:layout_marginStart="20dp"
      android:layout_marginRight="20dp"
      android:layout_marginEnd="20dp"
      android:choiceMode="singleChoice"/>

</LinearLayout>

<Button
    android:id="@+id/dialog_cancel_btn"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:text="X"
    android:textColor="#000000"
    android:gravity="center"
    android:layout_alignParentTop="true"
    android:layout_marginRight="10dp"
    android:layout_marginEnd="10dp"
    android:layout_marginTop="5dp"
    android:background="@drawable/round_button"/>

 </RelativeLayout>

 round_button.xml


<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadius="0dp"
android:shape="oval"
android:thicknessRatio="1.9"
android:useLevel="false" >

<solid android:color="@android:color/white" />

<size android:width="100dp"
    android:height="100dp"/>

<stroke android:width="1dp"
    android:color="#000000"/>