2015-07-05 90 views
0

我有一個ViewPagerContainer片段,在應用程序啓動時加載。 ViewPagerContainer片段將兩個選項卡(選項卡A和選項卡B)添加到操作欄。選項卡B具有兩個項目的列表視圖。導航回嵌套片段中的viewpager片段

我做了什麼: 我將一個單擊偵聽器附加到選項卡B片段中的列表視圖項目,以便當用戶單擊某個項目時,它會打開第一個片段內的另一片段(子片段),即在選項卡B下。

我卡在哪裏: 我想回到選項卡B當用戶按下後退按鈕。我嘗試通過將子片段添加到backstack來實現此操作,但不幸的是,它不會返回到選項卡B片段。請幫助我解決這個問題,我已經做了大量的研究,包括實施揹包黑客攻擊沒有成功。

我正在使用v4和v7 appcompat庫。

任何幫助,我將不勝感激。提前致謝。

編輯: 我設法從子片段導航回到操作欄選項卡。我通過下面的代碼來實現這一點:

//使用getChildFragmentManager()而不是getSupportFragmentManager() FragmentManager FM = getChildFragmentManager();

MyFragmentPagerAdapter fragAdapter = new MyFragmentPagerAdapter(fm);

viewPager.setAdapter(fragAdapter);

但是,在後退導航中,選項卡數量加倍,只有其中兩個可點擊,我可以看到它們的內容。當我再次點擊第二個選項卡上的listItem,然後再導航回來,再添加兩個選項卡,它會一直點亮。我該如何解決這個問題?下面是代碼

標籤乙片段: 公共類FindStylist延伸ListFragment {

String[] selectCat = { 
     "category A", 
     "Category B" 
}; 

private ListView listView; 
String mTime; 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

ArrayAdapter myAdapter =新ArrayAdapter(inflater.getContext(),android.R.layout .simple_list_item_1,selectCat ){

 public View getView(int position, View convertView, ViewGroup parent){ 

      View view = super.getView(position, convertView, parent); 

      TextView tv = (TextView) view.findViewById(android.R.id.text1); 

      tv.setTextColor(Color.BLACK); 
      tv.setGravity(Gravity.CENTER); 

      return view; 

      //listView = view.getListView(); 

     } 
    }; 

    setListAdapter(myAdapter); 

return super。onCreateView(inflater,container,savedInstanceState);

} 

公共無效onViewCreated(查看圖,捆綁savedInstanceState){

 listView = getListView(); 
      listView.setOnItemClickListener(new OnItemClickListener(){ 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
        if(position == 0){ 
         //best clicked 
         Toast.makeText(getActivity(), " catA clicked " + position, 5).show(); 

        }else if(position == 1){ 
         //nearest clicked 
         Toast.makeText(getActivity(), "CatB clicked " + position, 5).show(); 

         FragmentNearest fragment = new FragmentNearest(); 
         getActivity().getSupportFragmentManager().beginTransaction() 
         .replace(R.id.mainContent, fragment) 
         .addToBackStack(null) 
         .commit(); 
        } 

       } 
      }); 
} 

}

B的子片段:

公共類FragmentNearest延伸ListFragment {

String[] selectLocation = {"From Current Location", "Choose a Location"}; 

private ListView listView;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

ArrayAdapter myAdapter =新ArrayAdapter(inflater.getContext(),android.R.layout .simple_list_item_1,selectLocation){

 public View getView(int position, View convertView, ViewGroup parent){ 

      View view = super.getView(position, convertView, parent); 

      TextView tv = (TextView) view.findViewById(android.R.id.text1); 

      tv.setTextColor(Color.BLACK); 
      tv.setGravity(Gravity.CENTER); 

      return view; 

     } 
    }; 

    setListAdapter(myAdapter); 

    return super.onCreateView(inflater, container, savedInstanceState); 

} 
+0

你可以添加一些代碼嗎? – Cleb

+0

@ caleb檢查我編輯過的文章 – Alfred

+0

你在哪裏構建標籤?它可能不在片段的正確生命週期中,也是getChildFragmentManager()。popBackStack();應該回到正確的片段 – Brian

回答

0

您應該重寫onBackPressed在活動課這樣的方法。

@Override 
    public void onBackPressed() 
    { 
     if (iCanBackToFragment) 
     { 
      popBackStackOrWhateverYouUseToBack() 
     } 
     else 
     { 
      super.onBackPressed(); 
     } 
    }