簡體   English   中英

滑動選項卡時,進度對話框顯示為錯誤的片段,並且無法傳遞數據

[英]Progress dialog is showing in wrong fragment and cant pass data when tabs swiped

基本上我有3個選項卡可以刷卡。 我想做的是在不同的片段中顯示不同的列表(用於滑動選項卡)。 但是我面臨問題,或者也許我真的不知道該怎么做。

這是我所做的:

在第三個片段的onCreateView()方法中,我正在調用asynctask而在asyntask的onPreExecute()方法中,我正在調用進度對話框。

但是,當我從第一個(最高評分)片段滑動到第二個片段(游戲)時,顯示進度對話框,而應該在啟動第三個片段時顯示。

以下是代碼:

MainActivity.xml

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

fragment_top_rated.xml(第一個片段)::

<?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:background="#fa6a6a" >

 <TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="Design Top Rated Screen"
    android:textSize="20dp"
    android:layout_centerInParent="true"/>
 </RelativeLayout>

fragment_games(第二個片段)相同的代碼

對於fragment_movies(第3個fragment) ,我添加了gridview以及上面與fragments相同的代碼。

在片段的前2個Java類中,我剛剛擴展了Fragment類,並在其onCreateView()方法中擴展了-我將xml片段誇大了。

與第3個(MoviesFragment.java)類相同,除了-我正在調用asynctask來顯示進度對話框:

public class MoviesFragment extends Fragment 
 {
 GridView gridView;
 private ProgressDialog pDialog;

 View rootView;

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

    rootView = inflater.inflate(R.layout.fragment_movies, container, false);
   new GetSearchedBuses().execute(); 
    return rootView;
  }

private class GetSearchedBuses extends AsyncTask<Void, Void, Void> 
{
    @Override
    protected void onPreExecute() 
   {    super.onPreExecute();
        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Please wait...");
        pDialog.show();
    }

  @Override
    protected Void doInBackground(Void... arg0) 
    { }
  @Override
    protected void onPostExecute(Void result) 
    { }
 }

Main_activity .java

    public class MainActivity extends FragmentActivity implements
            ActionBar.TabListener 
{

        private ViewPager viewPager;
        private TabsPagerAdapter mAdapter;
        private ActionBar actionBar;
        private String[] tabs = { "Top Rated", "Games", "Movies" };

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            viewPager = (ViewPager) findViewById(R.id.pager);
            actionBar = getActionBar();
            mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

            viewPager.setAdapter(mAdapter);
            actionBar.setHomeButtonEnabled(false);
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        

            for (String tab_name : tabs) {
                actionBar.addTab(actionBar.newTab().setText(tab_name)
                        .setTabListener(this));
            }

            viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

                @Override
                public void onPageSelected(int position) {
                    actionBar.setSelectedNavigationItem(position);  }

                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2)
                 {  }

                @Override
                public void onPageScrollStateChanged(int arg0) 
                 {  }
            });
        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) 
        {   }

        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) 
         { viewPager.setCurrentItem(tab.getPosition());  }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) 
        {   }
    }

還有用於擴展FragmentPagerAdapter的TabAdapter的代碼:

    public class TabsPagerAdapter extends FragmentPagerAdapter 
   {
        public TabsPagerAdapter(FragmentManager fm) 
         {  super(fm);  }

        @Override
        public Fragment getItem(int index) 
         {
            switch (index) {
            case 0:
                return new TopRatedFragment();
            case 1:
                return new GamesFragment();
            case 2:
                return new MoviesFragment();
            }
        return null;
        }

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

所以,我哪里出問題了? 或者,我需要做些什么才能使其完美工作-在3rd Movies_fragment中顯示進度對話框; 我已經在哪里完成了代碼(而不是從第一片段滑動到第二片段時)?
我也嘗試過從片段的onResume調用asyncTask方法-但仍然相同。

另一件事是-我如何通過片段之間的意圖傳遞一些數據; 從一個刷卡到另一個刷卡時?

滑動標簽代碼的來源

而不是使用進度對話框,請嘗試在片段中使用ProgressBar。 在您的片段布局中定義它,在onCreateView中初始化它,並在asynctask的onPostExecute()方法中使其可見性消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM