【问题标题】:Android View Pager Issue in android applicationAndroid应用程序中的Android View Pager问题
【发布时间】:2017-05-12 20:06:43
【问题描述】:

如果我点击 backpress 按钮然后应用程序崩溃,请在动态加载数据之前在我的应用程序中使用 View pager 选项卡布局,请提供解决方案。

public class AcademicFragment extends Fragment {

    public static TabLayout tabLayout;
    public static ViewPager viewPager;

    //--------------------Getting degree_sought via shared Preference----------------------
    String stud_degree_sought;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        /**
         *Inflate academic_tab and setup Views.
         */
        View x = inflater.inflate(R.layout.academic_tab, null);
        tabLayout = (TabLayout) x.findViewById(R.id.tabs);
        viewPager = (ViewPager) x.findViewById(R.id.viewpager);
        /**
         *Set an Adater for the View Pager
         */

        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

        /**
         * Now , this is a workaround ,
         * The setupWithViewPager dose't works without the runnable .
         * Maybe a Support Library Bug .
         */

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                tabLayout.setupWithViewPager(viewPager);
            }
        });


        //--------------------Getting degree_sought via shared Preference----------------------
        SharedPreferences sharedPreferences = this.getActivity().getSharedPreferences(LoginActivity.SHARED_PREF_NAME, Context.MODE_PRIVATE);
        stud_degree_sought = sharedPreferences.getString(LoginActivity.KEY_DEGREE_SOUGHT, "Not Available");

        return x;

    }

    class MyAdapter extends FragmentPagerAdapter {

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

        /**
         * Return fragment with respect to Position .
         */


        @Override
        public Fragment getItem(int position) {


            //-------------------------------------Fragment for PostGraduation Tab-----------------------------
            if (stud_degree_sought.equalsIgnoreCase("2")) {
                switch (position) {
                    case 0:
                        return new PrimarydataFragment();
                    case 1:
                        return new ClasstwelveFragment();
                    case 2:
                        return new FirstyearFragment();
                    case 3:
                        return new SecondyearFragment();
                    case 4:
                        return new ThirdyearFragment();
                    case 5:
                        return new FourthyearFragment();
                }
            }

            //-------------------------------------Fragment for Graduation Tab-----------------------------
            else {
                switch (position) {
                    case 0:
                        return new UgPrimaryFragment();
                    case 1:
                        return new UgNinethDataFragment();
                    case 2:
                        return new UgTenClassDataFragment();
                    case 3:
                        return new UgTenBoardDataFragment();
                    case 4:
                        return new UgElevenClassFragment();
                    case 5:
                        return new UgTwelveClassFragment();
                    case 6:
                        return new UgTwelveBoardFragment();
                }

            }
            return null;
        }

        @Override
        public int getCount() {

            return DrawerActivity.value;

        }

        /**
         * This method returns the title of the tab according to the position.
         */

        @Override
        public CharSequence getPageTitle(int position) {

            //-------------------------------------PostGraduation Tab-----------------------------
            if (stud_degree_sought.equalsIgnoreCase("2")) {
                Log.d("Academic switchfragment", stud_degree_sought);
                switch (position) {


                    case 0:
                        return "Primary data";
                    case 1:
                        return "Grade 12 Board/IB";
                    case 2:
                        return "First Year";
                    case 3:
                        return "Second Year";
                    case 4:
                        return "Third Year";
                    case 5:
                        return "Fourth Year";
                }
            }
            //-------------------------------------Graduation Tab-----------------------------
            else {
                switch (position) {

                    case 0:
                        return "Primary Data";
                    case 1:
                        return "Class 9";
                    case 2:
                        return "Class 10";
                    case 3:
                        return "Class 10 Board";
                    case 4:
                        return "Class 11/IB";
                    case 5:
                        return "Class 12/IB";
                    case 6:
                        return "Class 12 Board/IB";

                }
            }
            return null;
        }
    }

}

片段代码

 void Ugtwelveclassdata() {

    progressbar.setVisibility(View.VISIBLE);

    Map<String, String> params = new HashMap<String, String>();
    params.put("id", id);

    CustomRequest jsObjRequest = new CustomRequest(Request.Method.POST, url, params, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            Log.d("Volley", response.toString());
            progressbar.setVisibility(View.GONE);
            getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

            try {
                success12 = response.getString("success12");

                if (success12.equalsIgnoreCase("1")) {

                    // HIDE THE SPINNER AFTER LOADING FEEDS

                    progressbar.setVisibility(View.INVISIBLE);
                    Log.d("1", "I am in try block success is 12 class");

                    JSONObject primarydetailarray = response.getJSONObject("class12");


                    total_percent = primarydetailarray.getString(Constant.TOTAL_PERCENT);
                    Log.d("total_percent", total_percent);

                    overall_rank = primarydetailarray.getString(Constant.OVERALL_RANK);
                    Log.d("overall_rank", overall_rank);

                    term_first_overall = primarydetailarray.getString(Constant.TERM_FIRST_OVERALL);
                    Log.d("overall_rank", term_first_overall);

                    term_second_overall = primarydetailarray.getString(Constant.TERM_SECOND_OVERALL);
                    Log.d("overall_rank", term_second_overall);

                    term_first_rank = primarydetailarray.getString(Constant.TERM_FIRST_RANK);
                    Log.d("overall_rank", term_first_rank);

                    term_second_rank = primarydetailarray.getString(Constant.TERM_SECOND_RANK);
                    Log.d("overall_rank", term_second_rank);


                    marksheet = primarydetailarray.getString(Constant.MARKSHEET);
                    Log.d("marksheet", marksheet);

                    ug_subject_pkey = primarydetailarray.getString(Constant.UG_SUBJECT_PKEY);
                    Log.d("pg_subject_pkey", ug_subject_pkey);

                    term = primarydetailarray.getString(Constant.TERM);
                    Log.d("pg_subject_pkey", term);

                    marks = primarydetailarray.getString(Constant.MARKS);
                    Log.d("marks", marks);

                    approve = primarydetailarray.getString("approve_status");
                    Log.d("approve", approve);


                    if (user_type.equalsIgnoreCase("parent")) {
                        update.setVisibility(View.GONE);

                    } else {

                        update.setVisibility(View.VISIBLE);

                    }

                    if (approve.equalsIgnoreCase("1")) {

                        approvetv.setVisibility(View.VISIBLE);
                        notapprove.setVisibility(View.GONE);
                        browsebtn.setEnabled(false);
                        update.setVisibility(View.GONE);

                    } else {

                        approvetv.setVisibility(View.GONE);
                        notapprove.setVisibility(View.VISIBLE);
                        browsebtn.setEnabled(true);
                        update.setVisibility(View.VISIBLE);


                    }


                    subjectpkey = primarydetailarray.getString(Constant.SUBJECTPKEY);
                    Log.d("subjectpkey", subjectpkey);

                    acad_honour = primarydetailarray.getString(Constant.ACAD_HONOUR);
                    Log.d("acad_honour", acad_honour);


                    String getsubjectpky[] = subjectpkey.split(",");
                    System.out.println("getsubjectpky" + Arrays.toString(getsubjectpky));

                    String mark[] = marks.split(",");
                    System.out.println("mark" + Arrays.toString(mark));

                    String terms[] = term.split(",");
                    System.out.println("terms" + Arrays.toString(terms));


                    ugsubjectpk = ug_subject_pkey.split(",");
                    System.out.println("pkkkkkkkkkkkkkk" + Arrays.toString(ugsubjectpk));


                    for (int s = 0; s < getsubjectpky.length; s++) {


                        child = getLayoutInflater(null).inflate(R.layout.rownine, null);
                        mContainerView.addView(child);
                        markeltwelveclass = (EditText) child.findViewById(R.id.markgrade);
                        markeltwelveclass.setText(mark[s].trim());

                        termtwelveclass = (EditText) child.findViewById(R.id.termnine);
                        termtwelveclass.setText(terms[s].trim());

                        Button dltbtn = (Button) child.findViewById(R.id.deletesubject);
                        dltbtn.setVisibility(View.INVISIBLE);

                        if (getsubjectpky.length >= 4)

                        {
                            dltbtn.setVisibility(View.VISIBLE);
                        }


                        subjectspinner = (Spinner) child.findViewById(R.id.fragmentnine_edittext_subjectname);

                        subjectadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, sub);
                        subjectadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
                        subjectspinner.setAdapter(subjectadapter);


                        for (int i = 0; i < subpkey.size(); i++) {

                            if (subpkey.get(i).equalsIgnoreCase(getsubjectpky[s])) {
                                subjectspinner.setSelection(i);
                            }
                        }


                        deletebtn = (Button) child.findViewById(R.id.deletesubject);
                        deletebtn.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {


                                {

                                    mContainerView.removeView((View) view.getParent());

                                }




                            }
                        });

                    }



                    if (subjectpkey.equalsIgnoreCase("0")) {

                        for (int p = 0; p < 2; p++) {
                            View child = getLayoutInflater(null).inflate(R.layout.rownine, null);
                            mContainerView.addView(child);

                            Button dltbtn = (Button) child.findViewById(R.id.deletesubject);
                            dltbtn.setVisibility(View.INVISIBLE);

                            subjectspinner = (Spinner) child.findViewById(R.id.fragmentnine_edittext_subjectname);

                            subjectadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, sub);
                            subjectadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
                            subjectspinner.setAdapter(subjectadapter);
                        }
                    }


                    twtotalpercentage.setText(total_percent);
                    twoverallrank.setText(overall_rank);
                    twaccademichonours.setText(acad_honour);
                    twfilename.setText(marksheet);
                    twtermoneovr.setText(term_first_overall);
                    twtermonerank.setText(term_first_rank);
                    twtermtwoovr.setText(term_second_overall);
                    twtermtworank.setText(term_second_rank);


                    if (twfilename.getText().toString().equalsIgnoreCase("null")) {

                        twfilename.setText("");

                    }


                } else {


                    update.setText("Submit");

                    progressbar.setVisibility(View.INVISIBLE);

                    for (int p = 0; p < 3; p++) {
                        View child = getLayoutInflater(null).inflate(R.layout.rownine, null);
                        mContainerView.addView(child);

                        Button dltbtn = (Button) child.findViewById(R.id.deletesubject);
                        dltbtn.setVisibility(View.INVISIBLE);


                        subjectspinner = (Spinner) child.findViewById(R.id.fragmentnine_edittext_subjectname);

                        subjectadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, sub);
                        subjectadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
                        subjectspinner.setAdapter(subjectadapter);
                    }
                    Log.d("fail", "status fail");
                }

            } catch (Exception e) {
                e.printStackTrace();
                showToast("Something embarrassing happened here.");
            }

        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
            VolleyLog.d("Volley", "Error: " + error.getMessage());
            showToast("Connection Error");
            progressbar.setVisibility(View.GONE);
            getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        }


    });

    //requestQueue.add(jsObjRequest);
    // Adding request to request queue

    jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(
            30000,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    AppController.getInstance().addToRequestQueue(jsObjRequest);
}

【问题讨论】:

  • 共享堆栈跟踪。
  • java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.view.Window android.support.v4.app.FragmentActivity.getWindow()' 片段 getActivity() 中的错误.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);对于这一行
  • @SagarDeshmukh 我在你的代码中看不到那部分你能分享那部分代码吗?

标签: android android-fragments android-viewpager android-tablayout


【解决方案1】:

问题是,您在创建活动之前调用getWindow() 方法。改为在您的 onActivityCreated() 方法中调用它:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    getActivity().getWindow().clearFlags(WindowManager.LayoutPar‌​ams.FLAG_NOT_TOUCHAB‌​LE);
}

现在应该可以了。

【讨论】:

  • 如果可行,请投票并接受解决方案作为答案:) 谢谢。
猜你喜欢
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多