Java 具有从EditText获取文本的方法的自定义DialogFragment
我在MainActivity内的列表视图中显示了一个对象数组,为了向列表中添加过滤器,我在MainActivity中添加了一个浮动按钮,其中显示了一个对话框片段 编辑我知道这是一个NullPointerException错误,它来自edittext,我想知道是什么原因导致了这种错误 该对话框显示2个编辑文本字段,带有默认的正按钮和负按钮 我想在按下肯定按钮时调用一个自定义方法,该方法检索在编辑文本中输入的文本,然后根据该文本过滤列表 问题是我有 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.view android.view.view.findViewById(int)” 代码Java 具有从EditText获取文本的方法的自定义DialogFragment,java,android,android-fragments,Java,Android,Android Fragments,我在MainActivity内的列表视图中显示了一个对象数组,为了向列表中添加过滤器,我在MainActivity中添加了一个浮动按钮,其中显示了一个对话框片段 编辑我知道这是一个NullPointerException错误,它来自edittext,我想知道是什么原因导致了这种错误 该对话框显示2个编辑文本字段,带有默认的正按钮和负按钮 我想在按下肯定按钮时调用一个自定义方法,该方法检索在编辑文本中输入的文本,然后根据该文本过滤列表 问题是我有 java.lang.NullPointerExce
主要活动
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
}