如何在DialogFragment上定位EditText

时间:2014-05-29 02:44:35

标签: java android

我创建了一个如下所示的DialogFragment:

package com.name.test;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.name.test.MainActivity.DialogType;

public class AlertDialogFragment extends DialogFragment {

    public static DialogType type;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        View v = getActivity().getLayoutInflater().inflate(R.layout.search_fragment, null);

        final EditText searchField = (EditText)v.findViewById(R.id.searchEditTxt);

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();

        switch(type) {
        case SEARCH:

            builder.setView(inflater.inflate(R.layout.search_fragment, null))

                .setTitle("Search Dialog")
                .setPositiveButton("Search", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        // logic for the search button
                        // Toast.makeText(getActivity().getBaseContext(), "Search Dialog", Toast.LENGTH_SHORT).show();

                        String tempString = searchField.getText().toString();
                        System.out.println(tempString);

                    }
                })
                //.setView(searchField)
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        // logic for the cancel button
                        AlertDialogFragment.this.getDialog().cancel();
                    }
                });


            break;
        case PREFERENCES:
            builder.setView(inflater.inflate(R.layout.preferences_fragment, null))
            .setTitle("Preferences")
            .setPositiveButton("Save", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        // logic for the search button
                        Toast.makeText(getActivity().getBaseContext(), "Preferences", Toast.LENGTH_SHORT).show();

                    }
                })
                //.setView(searchField)
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        // logic for the cancel button
                        AlertDialogFragment.this.getDialog().cancel();
                    }
                });


            break;

        default:
            break;

        }


        return builder.create();

    }

    public static AlertDialogFragment newInstance(DialogType dialogType) {
        type = dialogType;

        return new AlertDialogFragment();
    }

}

在这个片段的XML文件中,我有这个:

  
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:tag="search_fragment"
     android:orientation="vertical" >

     <EditText 
         android:id="@+id/searchEditTxt"
       android:hint="@string/search_menu_hint"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"

         />
 </LinearLayout>

我试图在DialogFragment中定位EditText,因此当用户输入内容并点击“保存”或“确定”时,我可以存储其值。我似乎无法正确定位EditText。我的System.out.println(tempString);是空的。我究竟做错了什么?非常感谢。

1 个答案:

答案 0 :(得分:2)

尝试改变

builder.setView(inflater.inflate(R.layout.search_fragment, null));

builder.setView(v);

您只需将inflated view设置为builder