android - 设置适配器为空

标签 android android-fragments

我正在尝试在抽屉导航内制作可滚动的选项卡,但 viewPager.setAdapter(new MyAdapter(fragmentManager)) 返回 null。

这总结了情况。

  • 抽屉导航中的四个条目标题。
  • 一个条目是可滚动的选项卡,就像 google playstore http://prntscr.com/8lq9gg
  • 默认添加三个标签,稍后更新
  • 在 fragment 中使用 viewPager
  • 每次我单击链接到可滚动标签的标题时,viewPager.setAdapter 都返回 null

这是我的代码

tab_container.java

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;


public class tab_container extends Fragment {

    public static tab_container newInstance() {
        tab_container fragment = new tab_container();

        return fragment;
    }

    public tab_container() {
        // Required empty public constructor
    }

    ViewPager viewPager = null;

    ArrayList<String> lessonList = new ArrayList<>();

    FragmentManager fragmentManager;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView =  inflater.inflate(R.layout.fragment_tab_container, container, false);

        viewPager = (ViewPager) getActivity().findViewById(R.id.lessonPager);
        fragmentManager = getActivity().getSupportFragmentManager();
        viewPager.setAdapter(new MyAdapter(fragmentManager));

        new lessonTab().execute();

        return rootView;
    }


    class MyAdapter extends FragmentPagerAdapter {

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            Fragment objFragment = null;

            switch (position) {
                case 0:
                    objFragment = tab1.newInstance();

                    break;
                case 1:
                     objFragment = tab2.newInstance();
                    break;
                case 2:
                    objFragment = tab3.newInstance();
                    break;
            }

            return objFragment;
        }

        @Override
        public int getCount() {
            return 3;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            String title = new String();
            if (position == 0) {
                title = "Lesson";
            }
            return title;
        }
    }

    class lessonTab extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {

        }

        @Override
        protected String doInBackground(String... strings) {
            BufferedReader reader = null;

            try {
                URL user_login_url = new URL("http://192.168.1.110/thermodynamics/index.php/users/get_lessons");

                HttpURLConnection con = (HttpURLConnection)user_login_url.openConnection();

                StringBuilder sb = new StringBuilder();

                reader = new BufferedReader(new InputStreamReader(con.getInputStream()));

                String lessonResponse;

                while ((lessonResponse = reader.readLine()) != null) {

                    return  lessonResponse;

                }

                return sb.toString();

            } catch (IOException e) {
                e.printStackTrace();
                return null;
            } finally {
                if(reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                        return  null;
                    }
                }
            }
        }

        @Override
        protected void onPostExecute(String lessonResponse) {
            try {
                JSONObject lessonObject = new JSONObject(lessonResponse);

                JSONArray lessonArray = lessonObject.getJSONArray("data");

                for (int i = 0; i < lessonArray.length(); i++) {

                    JSONObject dataLessons = lessonArray.getJSONObject(i);
                    lessonList.add(dataLessons.getString("lesson_title"));
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

    } // end of asynctask

} // end of fragment

fragment_tab_container.xml

<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/lessonPager" >

    <android.support.v4.view.PagerTitleStrip
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/title"
        android:background="#33B5E5"
        android:layout_gravity="top"
        android:paddingTop="4dp"
        android:paddingBottom="4dp">
    </android.support.v4.view.PagerTitleStrip>

</android.support.v4.view.ViewPager>

错误日志

09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime: FATAL EXCEPTION: main
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime: Process: thesis.thermodynamics.tip.app, PID: 21461
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime: java.lang.NullPointerException
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at thesis.thermodynamics.tip.app.tab_container.onCreateView(tab_container.java:67)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:733)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:136)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5001)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-29 05:11:22.453 21461-21461/thesis.thermodynamics.tip.app E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

非常感谢!

最佳答案

您的 viewpager 为空。您无法使用 Activity 作为上下文找到它,因为您当前正在创建 View 。

代替

viewPager = (ViewPager) getActivity().findViewById(R.id.lessonPager);

尝试在之前的充气 View 中找到 View :

viewPager = (ViewPager) rootView.findViewById(R.id.lessonPager);

关于android - 设置适配器为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32840270/

相关文章:

android - fragment 相互重叠显示

android - DialogFragment 中的 ViewPager,IllegalStateException : Fragment does not have a view

Android:切换加速度计旋转状态设置

java - 如何根据另一个 TextView 的内容有条件地启用 TextView?

android - onAttach() 如何知道哪个 Activity 正在调用它 (Android Studio)

android - FragmentManager popBackStack 不删除 fragment

android - 无法在 Osmdroid map 上显示路线

android - 布局不显示

android - 无法解析配置 ':app:_debugCompile' 的所有依赖项 -Facebook

android - fragment 中的 ListView 使用 ArrayAdapter 未设置