Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据从DialogFragment传递回活动_Java_Android_Android Fragments_Fragment - Fatal编程技术网

Java 将数据从DialogFragment传递回活动

Java 将数据从DialogFragment传递回活动,java,android,android-fragments,fragment,Java,Android,Android Fragments,Fragment,我在dialogfragment中设置了一个搜索字段,当用户最初单击打开时,允许他们输入标题并点击搜索。我希望它能够与活动的listview通信 不幸的是,我在尝试搜索时不断遇到崩溃。我使用侦听器设置了它,但我相信这与尝试从MainActivity的布局中读取textView有关,即使它位于DialogFragment的布局xml中 我试图通过MainActivity中的R.id.searchField调用它,onCreate的setContent布局XML与DialogFragment实现的布

我在dialogfragment中设置了一个搜索字段,当用户最初单击打开时,允许他们输入标题并点击搜索。我希望它能够与活动的listview通信

不幸的是,我在尝试搜索时不断遇到崩溃。我使用侦听器设置了它,但我相信这与尝试从MainActivity的布局中读取textView有关,即使它位于DialogFragment的布局xml中

我试图通过MainActivity中的R.id.searchField调用它,onCreate的setContent布局XML与DialogFragment实现的布局XML不同。我尝试这样做时没有出错,只有致命的崩溃。不知道为什么我会收到错误,下面是代码和堆栈跟踪:

主要活动:

public class MainActivity extends Activity implements searchListener{
public void searchBooks() 
    {
// Error is in this function, believe it has to do with this textField as it resides in // the DialogFragment's xml? Unless findViewById calls from all XMLS and just not one defined in 
//setContentView for the activity? Not sure though, initially I feel I should have this searchField 
//defined in the fragment class, but then I won't have access to it in this function in MainActivity, 
//or the mResults which is where the data is being used

        EditText searchField = (EditText) findViewById(R.id.searchField);

        if (mResults != null && !searchField.getText().equals(""))
        {

            String inputedText = searchField.getText().toString();
            JSONArray results = new JSONArray();

            for (int i = 0; i < mResults.length(); i++)
            {
                try {
                    JSONObject bookObject = mResults.getJSONObject(i);
                    if (bookObject.get("name").toString().equalsIgnoreCase(inputedText))
                    {
                        results.put(bookObject);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }
    }
public void showDialog() {
    DialogFrag newFragment = DialogFrag.newInstance();
    newFragment.show(getFragmentManager(), "dialog");
}
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Setting the main view
        setContentView(R.layout.activity_main_fragment);
}
}
堆栈跟踪

01-29 20:10:21.570: E/AndroidRuntime(11260): FATAL EXCEPTION: main
01-29 20:10:21.570: E/AndroidRuntime(11260): Process: com.brentadams.bookList, PID: 11260
01-29 20:10:21.570: E/AndroidRuntime(11260): java.lang.NullPointerException
01-29 20:10:21.570: E/AndroidRuntime(11260):    at com.brentadams.bookList.MainActivity.searchBooks(MainActivity.java:327)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at com.brentadams.bookList.fragments.SearchFragment$1.onClick(SearchFragment.java:48)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at android.view.View.performClick(View.java:4438)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at android.view.View$PerformClick.run(View.java:18422)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at android.os.Handler.handleCallback(Handler.java:733)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at android.os.Looper.loop(Looper.java:136)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at android.app.ActivityThread.main(ActivityThread.java:5017)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at java.lang.reflect.Method.invokeNative(Native Method)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at java.lang.reflect.Method.invoke(Method.java:515)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-29 20:10:21.570: E/AndroidRuntime(11260):    at dalvik.system.NativeStart.main(Native Method)
编辑新代码/错误:

接受了您的建议并将字符串传递回方法searchBooks,但现在收到一个愚蠢的nullpointerexception,我认为这没有任何意义。textview位于my activity_main_fragment.xml中:

public class MainActivity extends Activity implements searchListener{
public void searchBooks(String searchString) 
    { 


        if (mResults != null && searchString != null && !searchString.equals(""))
        {


            JSONArray results = new JSONArray();

            for (int i = 0; i < mResults.length(); i++)
            {
                try {
                    JSONObject bookObject = mResults.getJSONObject(i);
                    if (bookObject.get("name").toString().equalsIgnoreCase(searchString))
                    {
                        results.put(bookObject);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }
    }
public void showDialog() {
    DialogFrag newFragment = DialogFrag.newInstance();
    newFragment.show(getFragmentManager(), "dialog");
}
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Setting the main view
        setContentView(R.layout.activity_main_fragment);
}
}
堆栈跟踪

01-29 15:30:31.402: E/AndroidRuntime(777): FATAL EXCEPTION: main
01-29 15:30:31.402: E/AndroidRuntime(777): java.lang.NullPointerException
01-29 15:30:31.402: E/AndroidRuntime(777):  at com.brentadams.bookList.fragments.SearchFragment$1.onClick(SearchFragment.java:51)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.view.View.performClick(View.java:4084)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.view.View$PerformClick.run(View.java:16966)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.os.Handler.handleCallback(Handler.java:615)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.os.Handler.dispatchMessage(Handler.java:92)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.os.Looper.loop(Looper.java:137)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.app.ActivityThread.main(ActivityThread.java:4745)
01-29 15:30:31.402: E/AndroidRuntime(777):  at java.lang.reflect.Method.invokeNative(Native Method)
01-29 15:30:31.402: E/AndroidRuntime(777):  at java.lang.reflect.Method.invoke(Method.java:511)
01-29 15:30:31.402: E/AndroidRuntime(777):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-29 15:30:31.402: E/AndroidRuntime(777):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-29 15:30:31.402: E/AndroidRuntime(777):  at dalvik.system.NativeStart.main(Native Method)
第51行:

        String input = searchField.getText().toString();

findViewById()
将仅查找位于您在
setContentView()中指定的布局文件中的视图。您需要将
文本视图
移动到
活动的
布局中,或者将此逻辑移动到
片段
中,因此是的,问题是R.id.searchfield。它不是MainActivity的rootview的子视图,而是对话框片段的子视图

出现空指针是因为它找不到R.id.searchfield,结果searchfield为空,这会使您在调用searchfield.getText()时在下一行左右崩溃


只需让您的dialogfrag搜索文本字段,并将一个字符串传递回您的主要活动。

将其发布,感谢您花时间查看!什么是第327行
MainActivity.java
?如果(mResults!=null&&!searchField.getText().equals(“”),您需要使用接口作为对活动的回调,以在片段和活动之间传递值。但是您所做的是错误的,因此在
searchListener
界面中,更改
searchBooks
方法以接受字符串,即将其定义为
public void searchBooks(string searchString)。然后,在您的
对话框Framint
onClick(…)
方法中,从
EditText
中获取字符串,并将其传递给
listener.searchBooks(myString)01-29 15:30:31.402: E/AndroidRuntime(777): FATAL EXCEPTION: main
01-29 15:30:31.402: E/AndroidRuntime(777): java.lang.NullPointerException
01-29 15:30:31.402: E/AndroidRuntime(777):  at com.brentadams.bookList.fragments.SearchFragment$1.onClick(SearchFragment.java:51)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.view.View.performClick(View.java:4084)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.view.View$PerformClick.run(View.java:16966)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.os.Handler.handleCallback(Handler.java:615)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.os.Handler.dispatchMessage(Handler.java:92)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.os.Looper.loop(Looper.java:137)
01-29 15:30:31.402: E/AndroidRuntime(777):  at android.app.ActivityThread.main(ActivityThread.java:4745)
01-29 15:30:31.402: E/AndroidRuntime(777):  at java.lang.reflect.Method.invokeNative(Native Method)
01-29 15:30:31.402: E/AndroidRuntime(777):  at java.lang.reflect.Method.invoke(Method.java:511)
01-29 15:30:31.402: E/AndroidRuntime(777):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-29 15:30:31.402: E/AndroidRuntime(777):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-29 15:30:31.402: E/AndroidRuntime(777):  at dalvik.system.NativeStart.main(Native Method)
        String input = searchField.getText().toString();