已解决 –Android ViewPager和TabLayout无法正常运行

已解决 –Android ViewPager和TabLayout无法正常运行,第1张

概述TabLayout和ViewPager有嵌套片段.每个片段里面都有listview,所以他们可以一起调用,现在我遇到了app处理速度慢的问题.我尝试过一些像凌空图书馆这样的解决方案,但它对我不起作用.更多我发布我的代码所以请指导我做到最好.MainTabFragment.javapublicclassMainTabFragmentexte

TabLayout和VIEwPager有嵌套片段.每个片段里面都有ListvIEw,所以他们可以一起调用,现在我遇到了app处理速度慢的问题.我尝试过一些像凌空图书馆这样的解决方案,但它对我不起作用.更多我发布我的代码所以请指导我做到最好.

MainTabFragment.java

public class MainTabFragment extends Fragment {public static int position_child_tab = 0, three_childs_tab_position = 0;static int count = -1;int position_tab = 0;Bundle args;MyTabLayout myTabLayout;public MainTabFragment() {    // required empty public constructor}/** * Use this factory method to create a new instance of * this fragment using the provIDed parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment MainTabFragment. */// Todo: Rename and change types and number of parameterspublic static MainTabFragment newInstance(String param1, String param2) {    return new MainTabFragment();}@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);}@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) {    VIEw vIEw = inflater.inflate(R.layout.main_tab_fragment, container, false);    myTabLayout = (MyTabLayout) vIEw.findVIEwByID(R.ID.mainTabLayout);    NonSiwpablePager pager = (NonSiwpablePager) vIEw.findVIEwByID(R.ID.pager);    args = getArguments();    if (args != null && args.containsKey("pos_next"))        position_tab = args.getInt("pos_next");    if (args != null && args.containsKey("pos_end"))        position_child_tab = args.getInt("pos_end");    if (position_child_tab != 3) {        three_childs_tab_position = position_child_tab;    } else {        three_childs_tab_position = 0;    }    args = new Bundle();    args.putInt("pos_end", position_child_tab);    VIEwPagerAdapter mAdapter = getVIEwPagerAdapter();    pager.setAdapter(mAdapter);    pager.setoffscreenPagelimit(4);    myTabLayout.setupWithVIEwPager(pager);    for (int i = 0; i < mAdapter.getCount(); i++) {        VIEw customVIEw = mAdapter.getCustomeVIEw(getActivity(), i);        myTabLayout.getTabAt(i).setCustomVIEw(customVIEw);    }    pager.setCurrentItem(position_tab);    return vIEw;}@OverrIDepublic voID onVIEwCreated(VIEw vIEw, Bundle savedInstanceState) {    super.onVIEwCreated(vIEw, savedInstanceState);    myTabLayout.getTabAt(position_tab).getCustomVIEw().setSelected(true);}private VIEwPagerAdapter getVIEwPagerAdapter() {    VIEwPagerAdapter mAdapter = new VIEwPagerAdapter(getChildFragmentManager());    String Title_arr[] = {"ADVISORY", "top ADVISORS", "EXPERT VIEW"};    for (int i = 0; i < Title_arr.length; i++) {        Map<String, Object> map = new Hashtable<>();        map.put(VIEwPagerAdapter.KEY_Title, Title_arr[i]);        if (i == 0) {            map.put(VIEwPagerAdapter.KEY_FRAGMENT, AdvisoryPagerFragment.newInstance());        } else if (i == 1) {            map.put(VIEwPagerAdapter.KEY_FRAGMENT, topAdvisoryPagerFragment.newInstance());        } else if (i == 2) {            map.put(VIEwPagerAdapter.KEY_FRAGMENT, ExperVIEwPagerFragment.newInstance());        }        mAdapter.addFragmentAndTitle(map);    }    return mAdapter;}public static class VIEwPagerAdapter extends FragmentStatePagerAdapter {    private static final String KEY_Title = "fragment_Title";    private static final String KEY_FRAGMENT = "fragment";    boolean abc = false;    private int[] drawables = new int[]{R.drawable.advisory_selector, R.drawable.top_advisors_selector, R.drawable.expertvIEw_selector};    private List<Map<String, Object>> maps = new ArrayList<>();    public VIEwPagerAdapter(FragmentManager fm) {        super(fm);    }    public VIEw getCustomeVIEw(Context context, int pos) {        VIEw mVIEw = LayoutInflater.from(context).inflate(R.layout.custom_tab_vIEw, null);        TextVIEw mTextVIEw = (TextVIEw) mVIEw.findVIEwByID(R.ID.textVIEw);        mTextVIEw.setTypeface(Typeface.createFromAsset(context.getAssets(), "Fonts/uFonts.com_cambria.ttf"));        ImageVIEw mImageVIEw = (ImageVIEw) mVIEw.findVIEwByID(R.ID.imageVIEw2);        mImageVIEw.setTag(pos);        /*if(count >0)        {            Toast.makeText(context,"Count Is "+count,Toast.LENGTH_SHORT).show();            mImageVIEw =  (ImageVIEw) mImageVIEw.getTag(0);            mImageVIEw.setSelected(false);        }        */        mImageVIEw.setimageResource(drawables[pos]);        mTextVIEw.setText(getPageTitle(pos));        return mVIEw;    }    public voID addFragmentAndTitle(Map<String, Object> map) {        maps.add(map);    }    @OverrIDe    public CharSequence getPageTitle(int position) {        return (CharSequence) maps.get(position).get(KEY_Title);    }    @OverrIDe    public Fragment getItem(int position) {        return (Fragment) maps.get(position).get(KEY_FRAGMENT);    }    @OverrIDe    public int getCount() {        return maps.size();    }}}

MainTabFragment的子片段如下:

AdvisoryPagerFragment.java

public class AdvisoryPagerFragment extends Fragment {static String advisory_child_fragments[];int myID = 0;Bundle bundle;TabLayout mTabLayout;public AdvisoryPagerFragment() {    // required empty public constructor}/** * Use this factory method to create a new instance of * this fragment using the provIDed parameters. * * @return A new instance of fragment AdvisoryPagerFragment. */public static AdvisoryPagerFragment newInstance() {    return new AdvisoryPagerFragment();}@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);}@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) {    VIEw inflate = inflater.inflate(R.layout.fragment_app_pager, container, false);    /*Bundle args = getArguments();    if (args  != null && args.containsKey("pos_end"))         myID = args.getInt("pos_end");*/    myID = MainTabFragment.position_child_tab;    mTabLayout = (TabLayout) inflate.findVIEwByID(R.ID.fragmentTabLayout);    advisory_child_fragments = new String[]{"EQUITY", "INDICES", "commodity", "CURRENCY"};    VIEwPager pager = (VIEwPager) inflate.findVIEwByID(R.ID.fragment_pager);    FragmentVIEwPagerAdapter mPagerAdapter = new FragmentVIEwPagerAdapter(getChildFragmentManager());    pager.setAdapter(mPagerAdapter);    mTabLayout.setupWithVIEwPager(pager);    for (int i = 0; i < mPagerAdapter.getCount(); i++) {        VIEw customVIEw = mPagerAdapter.getCustomeVIEw(getActivity(), i);        mTabLayout.getTabAt(i).setCustomVIEw(customVIEw);    }    pager.setCurrentItem(myID);    return inflate;}@OverrIDepublic voID onVIEwCreated(VIEw vIEw, Bundle savedInstanceState) {    super.onVIEwCreated(vIEw, savedInstanceState);    mTabLayout.getTabAt(myID).getCustomVIEw().setSelected(true);}public static class FragmentVIEwPagerAdapter extends FragmentStatePagerAdapter {    public FragmentVIEwPagerAdapter(FragmentManager fm) {        super(fm);    }    public VIEw getCustomeVIEw(Context context, int pos) {        VIEw mVIEw = LayoutInflater.from(context).inflate(R.layout.custom_vIEw, null);        TextVIEw mTextVIEw = (TextVIEw) mVIEw.findVIEwByID(R.ID.belowTab_textvIEw);        mTextVIEw.setTypeface(Typeface.createFromAsset(context.getAssets(), "Fonts/uFonts.com_cambria.ttf"));        mTextVIEw.setText(getPageTitle(pos));        return mVIEw;    }    //    @OverrIDe    public CharSequence getPageTitle(int position) {        return advisory_child_fragments[position];    }    @OverrIDe    public Fragment getItem(int position) {        switch (position) {            case 0:                return new EquityFragment();            case 1:                return new IndicesFragment();            case 2:                return new commodityFragment();            case 3:                return new CurrencyFragment();        }        return null;    }    @OverrIDe    public int getCount() {        return 4;    } } }

并且上面的AdvisoryPagerFragment的子片段是

EquityFragment.java

public class EquityFragment extends androID.support.v4.app.Fragment implements SearchVIEw.OnqueryTextListener {public static String imagepath = null;static ArrayList<EquityDetails> catListDao = new ArrayList<EquityDetails>();static ArrayList<EquityDetails> catListDao1 = new ArrayList<EquityDetails>();static int count = 0;static int count1 = 0;ListVIEw List;VIEw vIEw;Activity act;AdvisorsAdapter adapter;TextVIEw empty_text;private boolean isVIEwShown = false;Progressbar progressbar;public static EquityFragment newInstance() {    return new EquityFragment();}@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) {    vIEw = inflater.inflate(R.layout.equity_activity, container, false);    act = this.getActivity();    Log.d("Callled ", "" + count);    count++;    return vIEw;}public voID onActivityCreated(Bundle savedInstanceState1) {    super.onActivityCreated(savedInstanceState1);    if (androID.os.Build.VERSION.SDK_INT > 9) {        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();        StrictMode.setThreadPolicy(policy);    }    List = (ListVIEw) vIEw.findVIEwByID(R.ID.List_equity);    setHasOptionsMenu(true);    empty_text = (TextVIEw) vIEw.findVIEwByID(R.ID.empty);    progressbar = (Progressbar) vIEw.findVIEwByID(R.ID.progressbar);    if (Utils.isNetworkAvailable(getActivity())) {        if (catListDao.size() > 0) {            adapter = new AdvisorsAdapter(act, R.layout.custom_equity, catListDao, 5);            List.setAdapter(adapter);        } else {            new Thread(new Runnable() {                @OverrIDe                public voID run() {                    // do some work here                    getActivity().runOnUiThread(new Runnable() {                        @OverrIDe                        public voID run() {                            //   if (!isVIEwShown) {                            new FetchAllData(getActivity(), 5).executeOnExecutor(AsyncTask.THREAD_POol_EXECUTOR);                            //    }                        }                    });                }            }).start();        }    } else {        CustomToast toast = new CustomToast(getActivity(), "There is no internet connection!");    } }

FetchdataClass从服务中获取数据并添加到ListVIEw中

public class FetchAllData extends AsyncTask<VoID, VoID, String> {    ProgressDialog pDialog;    int typeID;    private Context cont;    public FetchAllData(Context con, int typeID) {        // Todo @R_502_6843@-generated constructor stub        this.cont = con;        this.typeID = typeID;        Log.d("Constructor Called", "yes");    }    @OverrIDe    protected voID onPreExecute() {        // Todo @R_502_6843@-generated method stub        super.onPreExecute();        progressbar.setVisibility(VIEw.VISIBLE);    }    @OverrIDe    protected String doInBackground(VoID... params) {        // Todo @R_502_6843@-generated method stub        return getString();    }    private String getString() {        // Todo @R_502_6843@-generated method stub        URL obj = null;        httpURLConnection con = null;        try {            obj = new URL(Constants.AppBaseUrl + "/call_Listing/" + typeID);            String userPassword = "oi" + ":" + "kl";            String header = "Basic " + new String(androID.util.Base64.encode(userPassword.getBytes(), androID.util.Base64.NO_WRAP));            con = (httpURLConnection) obj.openConnection();            con.addRequestProperty("Authorization", header);            con.setRequestProperty("Content-type", "application/x-www-form-urlencoded");            con.setRequestMethod("POST");            // For POST only - BEGIN            con.setDoOutput(true);            OutputStream os = con.getoutputStream();            os.flush();            os.close();            // For POST only - END            int responseCode = con.getResponseCode();            if (responseCode == httpURLConnection.http_OK) { //success                BufferedReader in = new BufferedReader(new inputStreamReader(con.getinputStream()));                String inputline;                StringBuffer response = new StringBuffer();                while ((inputline = in.readline()) != null) {                    response.append(inputline);                }                in.close();                Log.i("TAG", response.toString());                return response.toString();            } else {                Log.i("TAG", "POST request dID not work.");            }        } catch (IOException e) {            e.printstacktrace();        }        return null;    }    @OverrIDe    protected voID onPostExecute(String result) {        // Todo @R_502_6843@-generated method stub        super.onPostExecute(result);        if (result != null) {            //    pDialog.dismiss();            progressbar.setVisibility(VIEw.GONE);            JsONObject JsonObject;            try {                catListDao = new ArrayList<EquityDetails>();                JsonObject = new JsONObject(result);                JsONArray JsonArray = JsonObject.getJsONArray("List");                Log.d("Length ", "" + JsonArray.length());                for (int i = 0; i < JsonArray.length(); i++) {                    EquityDetails allDirectory = new EquityDetails();                    allDirectory.setEntry_value(JsonArray.getJsONObject(i).getString("entry"));                    allDirectory.setSerial_value(JsonArray.getJsONObject(i).getString("sl"));                    allDirectory.setTg_value1(JsonArray.getJsONObject(i).getString("tgt_1"));                    allDirectory.setTg_value2(JsonArray.getJsONObject(i).getString("tgt_2"));                    allDirectory.setMainTitle_value(JsonArray.getJsONObject(i).getString("script"));                    allDirectory.setMain_subTitle_value(JsonArray.getJsONObject(i).getString("exchange"));                    allDirectory.setrating_value(JsonArray.getJsONObject(i).getString("rating"));                    allDirectory.setRevIEw_value(JsonArray.getJsONObject(i).getString("revIEw"));                    allDirectory.setimage1(JsonArray.getJsONObject(i).getString("advisor_image"));                    allDirectory.setPosted_by(JsonArray.getJsONObject(i).getString("posted_by"));                    allDirectory.setimage2(JsonArray.getJsONObject(i).getString("script_image"));                    allDirectory.setCall_ID(JsonArray.getJsONObject(i).getString("call_ID"));                    allDirectory.setBuy(JsonArray.getJsONObject(i).getString("buy_sentiment"));                    allDirectory.setSell(JsonArray.getJsONObject(i).getString("sell_sentiment"));                    allDirectory.setRecommend(JsonArray.getJsONObject(i).getString("recommendation"));                    allDirectory.setPosted_date(JsonArray.getJsONObject(i).getString("posted_date"));                    allDirectory.setExpiry_date(JsonArray.getJsONObject(i).getString("expiry_date"));                    catListDao.add(allDirectory);                }                catListDao1 = catListDao;                ab = true;                adapter = new AdvisorsAdapter(act, R.layout.custom_equity, catListDao, 0);                List.setAdapter(adapter);            } catch (JsONException e) {                e.printstacktrace();            }        }        //pDialog.dismiss();        progressbar.setVisibility(VIEw.GONE);    }}

解决方法:

试着设定

pager.setoffscreenPagelimit(no_of_fragments or pages);

在创建片段时执行asyctask中的所有任务

总结

以上是内存溢出为你收集整理的已解决 – Android ViewPager和TabLayout无法正常运行全部内容,希望文章能够帮你解决已解决 – Android ViewPager和TabLayout无法正常运行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1098285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存