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无法正常运行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)