Java 具有从EditText获取文本的方法的自定义DialogFragment

Java 具有从EditText获取文本的方法的自定义DialogFragment,java,android,android-fragments,Java,Android,Android Fragments,我在MainActivity内的列表视图中显示了一个对象数组,为了向列表中添加过滤器,我在MainActivity中添加了一个浮动按钮,其中显示了一个对话框片段 编辑我知道这是一个NullPointerException错误,它来自edittext,我想知道是什么原因导致了这种错误 该对话框显示2个编辑文本字段,带有默认的正按钮和负按钮 我想在按下肯定按钮时调用一个自定义方法,该方法检索在编辑文本中输入的文本,然后根据该文本过滤列表 问题是我有 java.lang.NullPointerExce

我在MainActivity内的列表视图中显示了一个对象数组,为了向列表中添加过滤器,我在MainActivity中添加了一个浮动按钮,其中显示了一个对话框片段

编辑我知道这是一个NullPointerException错误,它来自edittext,我想知道是什么原因导致了这种错误

该对话框显示2个编辑文本字段,带有默认的正按钮和负按钮

我想在按下肯定按钮时调用一个自定义方法,该方法检索在编辑文本中输入的文本,然后根据该文本过滤列表

问题是我有

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.view android.view.view.findViewById(int)”

代码
主要活动

public class MainActivity extends AppCompatActivity {

private  ListView listView;
public CustomAdaptar adaptar;

protected static ArrayList<Trip> trips = new ArrayList<>();
protected static ArrayList<Trip> allTrips = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.listView);
    adaptar = new CustomAdaptar();
// A lot of code for setting the list and other funcutionality

    FloatingActionButton fab_filter = (FloatingActionButton) findViewById(R.id.fab_filter);
    fab_filter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            DialogFrag filter = new DialogFrag();
            filter.show(getFragmentManager(),"Filter");
        }
} }
编辑堆栈跟踪

FATAL EXCEPTION: main
                                                                                 Process: com.transcendedapps.customlistandjson, PID: 1071
                                                                                 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
                                                                                     at com.transcendedapps.customlistandjson.DialogFrag.customFilter(DialogFrag.java:49)
                                                                                     at com.transcendedapps.customlistandjson.DialogFrag$2.onClick(DialogFrag.java:29)
                                                                                     at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:161)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                     at android.os.Looper.loop(Looper.java:158)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:7229)
                                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

要在DialogFragment中展开视图,您应该使用onViewCreated(视图视图,@Nullable Bundle savedInstanceState),因为在
onCreate(@Nullable Bundle savedInstanceState)
中,您还没有展开的视图。 您可以这样做:

首先在过滤器弹出式布局中添加一个按钮。 然后:

回调接口:

public interface FragCallback extends Serializable {

    void filter(String min, String max);
}
关于您的活动:

public class MainActivity extends AppCompatActivity implements FragCallback{
...
 FloatingActionButton fab_filter = (FloatingActionButton) findViewById(R.id.fab_filter);
fab_filter.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      DialogFrag.newInstance(this).show(getFragmentManager(),FragDialog.class.getSimpleName());
    }
}
....
@Override
public void filter(String max, String min){
    //do the filtering
}

使用此解决方案,无需调用onCreateDialog(Bundle savedInstanceState)

发布堆栈跟踪。我使用的代码几乎是从google Dialog参考中复制粘贴的。请参阅此处的新文档:让我知道它是否对您有用我将试用您的代码,但现在我通过用getDialog切换getView解决了这个问题。。。min=(EditText)getView().findViewById(R.id.et_filterMinPrice);to min=(EditText)getDialog().findViewById(R.id.et_filterMinPrice);今天尝试了这个方法,效果很好,但是你不能用这个方法设置正按钮和负按钮
public interface FragCallback extends Serializable {

    void filter(String min, String max);
}
public class MainActivity extends AppCompatActivity implements FragCallback{
...
 FloatingActionButton fab_filter = (FloatingActionButton) findViewById(R.id.fab_filter);
fab_filter.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      DialogFrag.newInstance(this).show(getFragmentManager(),FragDialog.class.getSimpleName());
    }
}
....
@Override
public void filter(String max, String min){
    //do the filtering
}