2017-03-18 6 views
0

는 내가 탭 활동을하고 첫 번째 탭에 표시 할 탭과 :탭 활동의 한 탭 (조각) 안에 두 개의 다른 조각을 숨기거나 표시하는 방법은 무엇입니까? 목록보기의 한 항목을 클릭하면 내가 처음 안에 다른 조각을 보여주고 싶은</p> <ul> <li>목록보기</li> <li>2 버튼</li> </ul> <p>:

  • 다른 목록보기
  • 다른 2 개 버튼

그런 다음 뒤로 버튼을 누르면 이전 탭 (동일한 탭에 있음)으로 돌아가고 싶습니다. 두 번째 listview (보이는 동안)의 arraylist의 데이터가 변경된 경우, 나는 첫 번째 listview의 arraylist에게 이러한 변경 사항을 적용하고자합니다. 그래서 두 목록보기의 데이터에 가능한 한 쉽게 액세스하고 싶습니다.

enter image description here

내 첫 번째 방법은 다음과 같습니다 모든 (내가/쇼 숨기 다른보기를 포함) 한 레이아웃 한 조각입니다. < - 나는 이것을 좋아하지 않는다. 수업은 거대하고 혼란 스럽다.

두 번째 방법은 첫 번째 조각/탭에 2 개의 조각이있는 다른보기 페이지가 있다는 것입니다. < -이 작업은 너무 복잡합니다 (주요 활동 탭 사이를 스 와이프하여 새 뷰 페이지를 방해하므로 처리해야 함).

가장 적합한 앱은 무엇입니까? 먼저

답변

0

당신은 내 목록보기 항목이 표시됩니다 layout.xml에 조각 태그를 정의해야합니다.

둘째 를 사용하여 코드 당신의 조각을 시작하기 위해 아래의

, addToBackStack (널)이 이전 조각을 절약 할 수 말할 가치
YourItem1Fragment fragment = new YourItem1Fragment(); 
       getFragmentManager().beginTransaction().replace(R.id.FragmentPlaceHolder, fragment).addToBackStack(null).commit(); 

당신은 다시 현재의 조각 다음은 이어질 때 너는 이전에 너를.

0

PageFragment를 만듭니다. ViewPager 어댑터에 의해 생성되고 ViewPager에 배치됩니다. getChildFragmentManager() 메서드로 얻은 FragmentManager를 사용하여 ListFragment의 PageFragment 내부를 전환합니다.

역 누름 이벤트 처리가 복잡하기 때문에 작업에서 제공해야합니다.

public interface IBackStackManager { 

    void addBackStackListener(BackStackListener listener); 

    void removeBackStackListener(BackStackListener listener); 

    interface BackstackListener { 

     boolean onBackPressed(); 

    } 

} 

이 같은 활동으로 구현 인터페이스를 만들기 : 당신의 PageFragment 사용 onAttach 및 onDetach 방법에

public class MainActivity extends AppCompatActivity implements IBackStackManager { 

     private final Deque<BackStackListener> backStackListeners = new ArrayDeque<>(); 

     @Override 
     public void addBackstackListener(BackStackListener listener) { 
      backStackListeners.add(listener); 
     } 

     @Override 
     public void removeBackStackListener(BackStackListener listener) { 
      backStackListeners.remove(listener);    
     } 

     @Override 
     public void onBackPressed() { 
      boolean result = false; 

      if (backStackListeners.size() > 0) { 
       BackStackListener listener = backStackListeners.peekLast(); 
       result = listener.onBackPressed(); 
      } 

      if (!result) { 
       super.onBackPressed(); 
      }   
     } 

    } 

다시 등록 스택 청취자에게

class PageFragment extends Fragment implements IBackStackManager.BackStackListener { 

    protected IBackStackManager backStackManager; 

    onAttach(Context context){ 
     super.onAttach(context); 
     try{ 
      backStackManager = (IBackStackManager) context; 
      backStackManager.addBackStackListener(this); 
     } catch(ClassCastException ex){ 
      ex.printStacktrace(); 
     } 
    } 

    onDetach(){ 
     super.onDetach(); 
     if (backStackManager != null){ 
      backStackManager.removeBackStackListener(this); 
     } 
    }  

    boolean onBackPressed(){ 
     if (getChildFragmentManager().getBackStackEntryCount() > 0){ 
      getChildFragmentManager().popBackStack(); 
      return true; 
     } else { 
      return false; 
     } 
    } 

}