【问题标题】:Switching between fragments with grid view afterwards loosing setOnItemClickListener of the gridview在失去 gridview 的 setOnItemClickListener 之后在带有网格视图的片段之间切换
【发布时间】:2014-01-05 08:41:49
【问题描述】:

我正在使用片段来创建我的网格视图。我还使用 tabhost 在片段之间切换。目前,我有 2 个 gridview 片段可以在它们之间切换。当我切换到第二个片段然后返回到第一个片段并单击网格视图中的一个项目时,会出现问题。我的第一个 gridview 片段的 setOnItemClickListener 不再起作用。错误表示空指针异常。

这是我的日志错误:

01-05 16:03:11.521: E/AndroidRuntime(6372): FATAL EXCEPTION: main 
01-05 16:03:11.521: E/AndroidRuntime(6372): java.lang.NullPointerException
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.content.ComponentName.<init>(ComponentName.java:75)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.content.Intent.<init>(Intent.java:3615)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at com.mayonstudios.onvolo.activities.ExploreFragment$JSONParse$1.onItemClick(ExploreFragment.java:97)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.widget.AdapterView.performItemClick(AdapterView.java:301)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.widget.AbsListView.performItemClick(AbsListView.java:1280)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:3071)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.widget.AbsListView$1.run(AbsListView.java:3973)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.os.Handler.handleCallback(Handler.java:615)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.os.Looper.loop(Looper.java:137)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at android.app.ActivityThread.main(ActivityThread.java:4921)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at java.lang.reflect.Method.invokeNative(Native Method)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at java.lang.reflect.Method.invoke(Method.java:511)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
01-05 16:03:11.521: E/AndroidRuntime(6372):     at dalvik.system.NativeStart.main(Native Method)

我的片段子类中的网格视图是使用 AsyncTask 创建的。 这是我的片段网格视图代码:

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {

    listExplore = (GridView)getActivity().findViewById(R.id.listviewExplore);

    /**
     * Inflate the layout for this fragment
     */
    new JSONParse().execute();

    return inflater.inflate(R.layout.custom_list_view, container, false);
}

/**
 * AsyncTask for Parsing
 */
private class JSONParse extends AsyncTask<String, String, JSONObject> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected JSONObject doInBackground(String... args) {
        JSONParser jParser = new JSONParser();

        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        return json;
    }
    @Override
    protected void onPostExecute(JSONObject json) {
        FeedArray arrayFeed = new FeedArray();
        feedListExplore = arrayFeed.getArrayListFromJSON(json);
        adapter = new CustomFeedAdapter(ExploreFragment.this.getActivity(), feedListExplore, listExplore);

        if(listExplore != null){
            new LoadImages().execute();
            listExplore.setAdapter(adapter);

            //Set Listener for Items.
            listExplore.setOnItemClickListener(new AdapterView.OnItemClickListener() {    
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent i = new Intent(getActivity(), PostDetailActivity.class); 
                    ResultsClass itemPost = feedListExplore.get(position);
                    i.putExtra("postObject", itemPost);
                    startActivity(i); 
                } 
            });

        }
    }
}

我现在只是在学习使用片段。我认为可能是错误与片段的生命周期有关?我应该在片段之间切换时使用 onPause 和 onResume 以便保留我的 setOnItemClickListener 吗?但我不知道该怎么做。

非常感谢任何指导。提前致谢。

【问题讨论】:

    标签: android gridview android-fragments android-asynctask onitemclicklistener


    【解决方案1】:

    在下面代码的每一行放置一个try catch块

     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Intent i = new Intent(getActivity(), PostDetailActivity.class); 
                        ResultsClass itemPost = feedListExplore.get(position);
                        i.putExtra("postObject", itemPost);
                        startActivity(i); 
                    } 
    

    找出为空的引用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多