[英]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.