У меня есть приложение с тремя вкладками: «Карта», «События» и «Обзоры». Я зарегистрировал данные (как показано в моем коде везде, где есть журнал), и происходит следующееAndroid-swipe tabs viewpager issue
я запустить приложение и он открывается на вкладке 'Map' журнал однако, показывает
02-14 05:.. 37: 56,240: D/curent вкладка позиции (1787): 0 02-14 05: 37: 56.260: D/arg0 (1787): 0 02-14 05: 37: 56.260: выбранный D/tab (1787): MapFragment 02-14 05: 37: 56.260: D/arg0 (1787): 1 02-14 05: 37: 56.260: выбран D/tab (1787): список_Of_EventsFragment
Я нажимаю на вкладку «События» (вторая вкладка на панели действий), и фрагмент событий отображается просто отлично. Но журнал показывает следующее, а также показывает обработку JSON, которая НЕ является частью фрагмента «События». он закодирован в фрагменте «Обзоры». Таким образом, он по-прежнему показывает List_Of_EventsFragment еще в фоновом режиме свою загрузку ReviewsListFragment.
02-14 05: 38: 37,890 D/arg0 (1787): 2 02-14 05: 38: 37,890 D/вкладка выбрана (1787): ReviewsListFragment 02-14 05: 38: 37.910: D/позиция текущей позиции (1787): 1 02-14 05: 38: 37.910: D/позиция текущего положения (1787): 1
Как вы можете видеть, позиция «текущая позиция страницы» и «текущая позиция табуляции» 'являются правильными. Они отображают 0,1,2 с уважением для каждой вкладки. Проблема, похоже, заключается в «arg0». Я попытался изменить свои операторы if на «if (arg0 == 1)» вместо «(если arg0 == 0)» и т. Д. Это не сработало, поскольку оно вызвало исключение nullpointerException. Кажется, когда приложение загружается, arg0 равно 0, а затем 1 сразу после, хотя фрагмент «Карта» открыт и ничего не было нажато.
package com.example.eventmapapp;
import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
import android.util.Log;
import android.view.Menu;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
public class FrontPage extends FragmentActivity implements TabListener{
ActionBar actionbar;
ViewPager viewpager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_front_page);
viewpager =(ViewPager) findViewById(R.id.pager);
viewpager.setAdapter(new MyAdapter(getSupportFragmentManager()));
viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
actionbar.setSelectedNavigationItem(arg0);
Log.d("current page position", arg0 + "");
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
actionbar = getActionBar();
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tab1 = actionbar.newTab();
tab1.setText("Map");
tab1.setTabListener(this);
ActionBar.Tab tab2 = actionbar.newTab();
tab2.setText("Events");
tab2.setTabListener(this);
ActionBar.Tab tab3 = actionbar.newTab();
tab3.setText("Reviews");
tab3.setTabListener(this);
actionbar.addTab(tab1);
actionbar.addTab(tab2);
actionbar.addTab(tab3);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
viewpager.setCurrentItem(tab.getPosition());
Log.d("current tab position", tab.getPosition() + "");
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
class MyAdapter extends FragmentPagerAdapter
{
public MyAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int arg0) {
Fragment fragment = null;
Log.d("arg0", arg0 + "");
if (arg0==0) //|| arg0==1
{
fragment = new MapFragment();
Log.d("tab chosen", "MapFragment");
} else
if (arg0==1)
{
fragment = new List_Of_EventsFragment();
Log.d("tab chosen", "List_Of_EventsFragment");
} else
if (arg0==2)
{
fragment = new ReviewsListFragment();
Log.d("tab chosen", "ReviewsListFragment");
}
return fragment;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.front_page, menu);
return true;
}
}
спасибо. мой эмулятор продолжал замерзать, хотя это может быть еще одна проблема только с моим эмулятором. по телефону, я тестировал и работает отлично. –
на моей третьей вкладке, он использует php и json. поэтому, когда вторая вкладка открыта, она уже подключается к Интернету и загружает данные json. так это нормально? С этим можно было подумать, что что-то подозрительное. –
в любом случае он работает над самим телефоном, и спасибо за ваш комментарий :) Я думаю, я помечаю это как выполненное :) спасибо alot :) –