2013-09-25 8 views
0

У меня возникли проблемы с моим представлением. В основном я использую Фрагмент, вот мой снимок экрана.
фотография photo A Фото B photo Bандроид заменить вид (фрагмент)

не против язычков. Когда я нажимаю Настройку в правом верхнем угле фото AI раздувать Settings Layout затем, если я нажму настройки аккаунта Settings Layout заменены Account Detail макетом

после того, что, если я хочу, чтобы выйти из системы нажмет Setting, но на экране еще есть «Счет Деталь ", на которой находится фотография B, но это должно быть Settings Layout (фото A)

Я не знаю, как этого достичь. ниже приведены мои коды.

Кнопка настроек: Фрагмент фрагмента => getFragmentManager(). FindFragmentById ( android.R.id.content); если (фрагмент = нуль & & fragment.isInLayout (!)) { } еще {

  //fragment 
      SharedPreferences.Editor editor = getPreferences(0).edit(); 
      editor.putString("user_name", user_name); 
      editor.putInt("user_id", user_id); 
      editor.commit(); 

      Fragment mFragment = new SettingsFragment(); 

      FragmentTransaction ft = getFragmentManager() 
        .beginTransaction(); 
      ft.replace(android.R.id.content, mFragment, "settings"); 
      ft.commit(); 

     } 

в моем фрагменте:

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {  
     if (view != null) { 
      ViewGroup parent = (ViewGroup) view.getParent();   // 
      System.out.println("asd"+parent); 
      if (parent != null) { 
     parent.removeView(view); 
      } 
     } else { 

    } 
return view; 
} 

мой аккаунт кнопку Настройка:

account.setOnClickListener(new View.OnClickListener() {    @Override   public void onClick(View v) { 
       Fragment mFragment = new AccountSettings(); 

       FragmentTransaction ft = getFragmentManager() 
         .beginTransaction(); 

       ft.replace(R.id.lists, mFragment); 

       // ft.addToBackStack(null); 
       ft.commit();   }  }); 

Пожалуйста спаси меня, я новичок в андроиде. Любое предложение и комментарий были бы отличной помощью. Благодаря

+0

Вместо замены вы можете использовать «добавить», а затем, когда хотите вернуться, вы можете просто выскочить фрагменты, которые вы хотите убрать. –

+0

@ Yume117 что такое код для pop? – CaffeineShots

+0

Android doc: http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack%28java.lang.String,%20int%29 –

ответ

1

Например:

Это будет совать последний переход фрагмента с этим фрагментом тегом

@Override 
    public void onBackPressed() { 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     int stackSize = fragmentManager.getBackStackEntryCount(); 
     if (stackSize == 0) { 
      finish(); 
     } 
     else { 
      String fragmentTag = fragmentManager.getBackStackEntryAt(stackSize - 1).getName(); 
      fragmentManager.popBackStack(fragmentTag, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     } 
    } 

И это способ сделать TRANSITION

 @Override public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

        CustomFragment fragment = new CustomFragment(); 
        getActivity() 
         .getSupportFragmentManager() 
         .beginTransaction() 
         .setCustomAnimations(R.animator.anim_back_right,R.animator.anim_back_left, R.animator.anim_left, R.animator.anim_right) 
         .add(R.id.custom_fragment, fragment) 
         .addToBackStack(MainActivity.THIS_FRAGMENT_TAG) 
         .commit(); 
     } 

Идея здесь

+0

Я вижу .. Я пытаюсь повторить некоторые из моих кодов. +1 – CaffeineShots

+0

Постарайтесь сделать это шаг за шагом. Действительно побитно, чтобы вы не потеряли его;) –

1
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {  
     if (view != null) { 
      ViewGroup parent = (ViewGroup) view.getParent();   // 
      System.out.println("asd"+parent); 
      if (parent != null) { 
     parent.removeView(view); 
      } 
     } else { 

    } 
return view; 
} 

изменить на

Fragment mFragment = new Settings(); 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      System.out.println(view); 
      if (view != null) { 

       ViewGroup parent = (ViewGroup) view.getParent(); 
       // System.out.println("asd"+parent); 
       if (parent != null) { 
        parent.removeView(view); 

       } else { 
        FragmentTransaction ft = getFragmentManager() 
          .beginTransaction(); 
        ft.detach(mFragment); 
        ft.attach(mFragment); 
        ft.replace(R.id.lists, mFragment); 
        ft.commit(); 
        //System.out.println("saadasd"); 
       } 
      } else { 
       try { 
        view = inflater.inflate(R.layout.selectionfrag, container, 
          false); 

        FragmentTransaction ft = getFragmentManager() 
          .beginTransaction(); 
        ft.replace(R.id.lists, mFragment); 
        ft.commit(); 
       } catch (InflateException e) { 

       } 
      } 

      return view; 
     } 

Я просто отсоединяю фрагмент и прикрепляю его, а затем заменяю содержимое.

ft.detach(mFragment); 
ft.attach(mFragment); 
ft.replace(R.id.lists, mFragment); 

, но я не знаю, является ли это лучшей практикой. может ли кто-нибудь сказать?

Смежные вопросы