В моем приложении Android я использую навигационный ящик, и я открываю фрагменты на элементе элемента drawer. Я хочу использовать один и тот же объект каждый раз, но не смог найти правильный способ сделайте это. И это также занимает некоторое время (1-2 секунды) для загрузки, и я не использую api на этом этапе.Как использовать уже созданный объект для открытия фрагментов
Вот что я сделал до сих пор:
public class HomeActivity extends FragmentActivity {
public String getTitleText() {
return titleText;
}
public void setTitleText(String titleText) {
this.titleText = titleText;
titleTextTextView = (AvenirBookTextview) findViewById(R.id.home_title);
titleTextTextView.setText(titleText);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
HomeMenuButtonLayout = (LinearLayout) findViewById(R.id.HomeMenuButtonLayout);
HomeMenuButtonLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(GravityCompat.START);
}
});
// load slide menu items
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_item);
navMenuIcons = getResources().obtainTypedArray(R.array.nav_drawer_item_icon);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
navDrawerItems = new ArrayList<NavDrawerItem>();
// adding nav drawer items to array
for (int i = 0; i < navMenuTitles.length; i++) {
navDrawerItems.add(new NavDrawerItem(navMenuTitles[i], navMenuIcons.getResourceId(i, -1)));
}
// Set Header Right Drawer
LayoutInflater inflaters = getLayoutInflater();
ViewGroup headertop = (ViewGroup) inflaters.inflate(R.layout.list_home_header, mDrawerList,
false);
mDrawerList.addHeaderView(headertop, null, false);
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems, "yes");
mDrawerList.setAdapter(adapter);
openFragment(new HomeFragment());
setTitleText("Home");
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
if (position == 1) {
openFragment(new Fragment1());
}
if (position == 2) {
openFragment(new Fragment2());
}
if (position == 3) {
openFragment(new Fragment3());
}
if (position == 4) {
openFragment(new Fragment4());
}
if (position == 5) {
openFragment(new Fragment5());
}
if (position == 6) {
openFragment(new Fragment6());
}
if (position == 7) {
openFragment(new Fragment7());
}
}
});
}
public void openFragment(final Fragment fragment) {
// TODO Auto-generated method stub
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).addToBackStack(null).commit();
mDrawerLayout.closeDrawers();
}
}
И я также пытался:
public void openFragment(final Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
if (fragment.isAdded()) {
transaction.show(fragment);
} else {
transaction.replace(R.id.frame_container, fragment);
transaction.addToBackStack(fragment.getClass().getName());
System.out.println("Number of Backstacks" + fragment.getClass().getName());
}
transaction.commit();
}
mDrawerLayout.closeDrawers();
}
Редактировать
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.testApplication/com.testApplication.HomeActivity}: java.lang.NullPointerException: Attempt to write to field 'int android.support.v4.app.Fragment.mNextAnim' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.NullPointerException: Attempt to write to field 'int android.support.v4.app.Fragment.mNextAnim' on a null object reference
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:717)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1259)
at android.app.Activity.performStart(Activity.java:6026)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Почему вы хотите использовать один и тот же объект, когда старший фрагмент не виден в UI? Я сомневаюсь, что это не хороший дизайн? –
Потому что я не хочу загружать данные каждый раз, когда нажимаю на меню. Я хочу загрузить данные только один раз и повторно использовать его. – AbhayBohra
Храните данные в своей деятельности, а при вызове replaceFragment() установите данные в объект фрагмента. Ваши данные будут сохраняться до тех пор, пока ваша активность не будет сохранена. –