0

각 탭에 3 개의 다른 조각이 들어있는 작업 표시 줄 탭에 3 개의 탭이 있습니다. 첫 번째 탭 안에있는 조각을 바꾸고 싶습니다. 우리는 단편 1은 (는) 에 Tab1 현재 표시됩니다. 수 있습니다 말 조각 1목록보기 있습니다. 목록보기에서 항목을 탭할 때 그 내용을 변경하고 싶습니다. 조각 1조각 2으로 변경하십시오. 어떻게해야할까요? 도와주세요. 학부모 활동에 대한ActionBar 탭의 단일 탭 안에 조각을 바꾸는 방법

코드 : 여기

public class ParentActivity extends FragmentActivity { 

ActionBar actionBar; 
private int mTitleRes; 
protected Fragment mFrag; 
private CharSequence mTitle; 

// TESTING DATAS 
private String report_options = "1110000000"; 
private ReportsTypeChecker reportChecker = new ReportsTypeChecker(); 

public static class TabListener<T extends Fragment> implements 
     ActionBar.TabListener { 
    private Fragment mFragment; 
    private final FragmentActivity myActivity; 
    private final String mTag; 
    private final Class<T> mClass; 

    /** 
    * Constructor used each time a new tab is created. 
    * 
    * @param activity 
    *   The host Activity, used to instantiate the fragment 
    * @param tag 
    *   The identifier tag for the fragment 
    * @param clz 
    *   The fragment's Class, used to instantiate the fragment 
    */ 
    public TabListener(FragmentActivity activity, String tag, Class<T> clz) { 
     myActivity = activity; 
     mTag = tag; 
     mClass = clz; 

    } 

    @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 

     System.out.println("ON tabs"); 
     if (mFragment == null) { 
      System.out.println("mFragment null"); 
      // If not, instantiate and add it to the activity 
      mFragment = Fragment.instantiate(myActivity, mClass.getName()); 
      ft.add(android.R.id.content, mFragment, mTag); 

     } else { 

      ft.show(mFragment); 

     } 

    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     if (mFragment != null) { 
      // Detach the fragment, because another one is being attached 
      // ft.detach(mFragment); 
      ft.hide(mFragment); 
     } 
    } 

} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // getWindow().setUiOptions(
    // ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW); 
    super.onCreate(savedInstanceState); 
    // setContentView(R.layout.parent_layout); 
    actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

// HERE IS THE TAB1 THAT CONTAINS THE FRAGMENT1 THAT I WANT TO CHANGE INTO FRAGMENT2 

       Tab tab = actionBar 
       .newTab() 
       .setText(getResources().getString(R.string.parent_tab1)) 
       .setTabListener(
         new TabListener<Fragment1>(this, 
           getResources().getString(
             R.string.parent_tab1), 
           Fragment1.class)); 
     actionBar.addTab(tab); 

    Tab tab2 = actionBar 
      .newTab() 
      .setText(getResources().getString(R.string.parent_tab2)) 
      .setTabListener(
        new TabListener<AnnouncementsFragment>(this, 
          getResources().getString(R.string.parent_tab1), 
          AnnouncementsFragment.class)); 
    actionBar.addTab(tab2); 

    Tab tab3 = actionBar 
      .newTab() 
      .setText(getResources().getString(R.string.parent_tab3)) 
      .setTabListener(
        new TabListener<TodayFragment>(this, getResources() 
          .getString(R.string.parent_tab3), 
          TodayFragment.class)); 

    actionBar.addTab(tab3); 

}} 

내 Fragment1됩니다 : 여기 아래에있는 내 코드는

public class Fragment1 extends Fragment { 

ArrayList<String> storeList = new ArrayList<String>(); 
// String[] storeArray; 
protected Fragment mFrag; 
Button checkinbtn; 
ListView storeLv; 
ArrayAdapter<String> arrayAdapter; 
String storetitle = ""; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View myFragmentView = inflater.inflate(R.layout.fragment_usercheckin, 
      container, false); 

    // setTitle(getResources().getString(R.string.title_activity_report)); 

    storeLv = (ListView) myFragmentView.findViewById(R.id.checkin_lv); 
    fillStores(); 

    arrayAdapter = new ArrayAdapter<String>(getActivity(), 
      R.layout.listview_textitem, R.id.listview_txt, storeList); 
    storeLv.setAdapter(arrayAdapter); 

    storeLv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> myAdapter, View myView, 
       int myItemInt, long mylng) { 

// I want to Replace the current Fragment on the tab1 into Fragment2 here 


     } 
    }); 
    return myFragmentView; 
} 

} 난 당신이 나에게 도움이 될 희망

out..Thanks

답변

0

TabListener을 수정할 수 있으며 조각 목록을 사용하거나 그들의 수업).

public static class TabListener<T extends Fragment> implements 
     ActionBar.TabListener { 
    private int mIndex; 
    private ArrayList<Fragment> mFragments; 
    private final FragmentActivity myActivity; 
    private final String mTag; 
    private final ArrayList<Class<T>> mClasses; 

    /** 
    * Constructor used each time a new tab is created. 
    * 
    * @param activity 
    *   The host Activity, used to instantiate the fragment 
    * @param tag 
    *   The identifier tag for the fragment 
    * @param classes 
    *   The fragment's Classes, used to instantiate the fragments 
    */ 
    public TabListener(FragmentActivity activity, String tag, ArrayList<Class<T>> classes) { 
     myActivity = activity; 
     mTag = tag; 
     mClasses = classes; 
     mIndex = 0; 
    } 

    public boolean selectNextTab(Tab tab, FragmentTransaction ft) { 
     if (mIndex < (mClasses.size() - 1)) { 
      mIndex += 1; 
      onTabSelected(Tab tab, FragmentTransaction ft); 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public boolean selectPrevTab(Tab tab, FragmentTransaction ft) { 
     if (mIndex > 0) { 
      mIndex -= 1; 
      onTabSelected(Tab tab, FragmentTransaction ft); 
      return true; 
     } else { 
      return false; 
     } 
    } 

    @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 
     System.out.println("ON tabs"); 
     if (mFragments.size() <= mIndex) { 
      System.out.println("Fragment doesn't exist yet"); 
      // If not, instantiate and add it to the activity 
      mFragments.add(Fragment.instantiate(myActivity, mClasses.get(mIndex).getName())); 
      ft.add(android.R.id.content, mFragments.get(mIndex), mTag); 

     } else { 
      ft.show(mFragments.get(mIndex)); 
     } 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     if (mFragments.get(mIndex) != null) { 
      // Detach the fragment, because another one is being attached 
      // ft.detach(mFragment); 
      ft.hide(mFragments.get(mIndex)); 
     } 
    } 
} 

그런 다음 당신은 당신의 ParentActivity를 통해 특정 TabListener 인스턴스를 액세스하여 onItemClick() 방법 내에서 selectNextTab() 메서드를 호출 할 수 있습니다.

TabFragmentTransaction 매개 변수 인스턴스를 얻는 방법을 모르겠습니다. onTabSelected()이 처음 호출 될 때 인스턴스를 TabListener 멤버 변수에 두는 것이 좋습니다. 이 경우 selectNextTab() 메소드에는 매개 변수가 필요하지 않습니다.

또한 일반 T 정의에서는 작동하지 않을 것이라고 생각합니다. 그래도 Class<Fragment>을 사용할 수 있어야합니다.

이렇게하면 효과가 있는지 알려주세요. 행운을 빕니다.

관련 문제