나는 안드로이드의 조각에별로 익숙하지 않다. 내 마지막 프로젝트에서 나는 TabActivity를 사용하고 있었지만 지금은 Deprecation 때문에 시작하고 있는데, Fragments를 사용하여 ActionBar를 구현하고있다.중첩 된 조각을 피하는 ActivityTab 안의 Android MasterDetail 레이아웃
public class TabInterventoClass extends FragmentActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
Tab tab = actionBar.newTab()
.setText("Dati")
.setTabListener(new TabListener<DatiFragment_>(this, "dati", DatiFragment_.class));
actionBar.addTab(tab);
tab = actionBar.newTab()
.setText("Sistemi alimentazione")
.setTabListener(new TabListener<SistemaAlimentazioneFragment_>(this, "Sistemi alimentazione", SistemaAlimentazioneFragment_.class));
actionBar.addTab(tab);
tab = actionBar.newTab()
.setText("Home")
.setTabListener(new TabListener<HomeFragment_>(this, "home", HomeFragment_.class));
actionBar.addTab(tab);
}
나는이 방법으로 ActionBar.TabListener을 구현했습니다 :
public class TabListener<T extends Fragment> implements ActionBar.TabListener {
private Fragment mFragment;
private final FragmentActivity mActivity;
private final String mTag;
private final Class<T> mClass;
public TabListener(FragmentActivity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// Check if the fragment is already initialized
if (mFragment == null) {
// If not, instantiate and add it to the activity
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mTag);
} else {
// If it exists, simply attach it in order to show it
//ft.attach(mFragment);
ft.show(mFragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
// Detach the fragment, because another one is being attached
//ft.detach(mFragment);
ft.hide(mFragment);
}
}
}
이/부착에 대한 설명을 참고 찬성 방법을 분리하십시오 여기
내 탭 클래스의 코드 표시/숨기기. 왜냐하면 두 번째 탭에 두 번째 탭 (두 번째 탭 단편의 잘못된 디자인에 대해)을 입력했기 때문입니다. 다음은 예외! 는10-18 11:10:13.093: E/AndroidRuntime(3777): Caused by: java.lang.IllegalArgumentException: Binary XML file line #38: Duplicate id 0xffffffff, tag sistemiList, or parent id 0x0 with another fragment for it.cpmapave.mt.ui.intervento.SistemaAlimentazioneListFragment_
(.. 문제를 해결하지만 그의 어댑터를 새로 고침하기 위해 그것을 얻을 수있는 방법이 필요합니다 그래서 대신 첨부의/숨기기 조각 /을 보여 태그와 <fragment android:name="it.cpmapave.mt.ui.intervento.SistemaAlimentazioneListFragment_" />
의 ID를 제거 떼다). 운좋게도 방향을 수정해야 표시/숨기기를 사용하여 방향이 바뀌면 조각이 겹치는 문제가 없습니다.
여기 Fragment 클래스를 확장하는 첫 번째 탭 표시 DatiFragment가 있습니다.
는 그리고 이것은 괜찮을 것 같다!
여기는 StrumentiFragment를 표시하는 두 번째 탭에 있습니다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:divider="?android:attr/dividerHorizontal"
android:showDividers="middle">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:gravity="center_vertical"
android:text="Sistema di alimentazione:" />
<Spinner
android:id="@+id/sistemiDiAlimentazione"
android:layout_height="fill_parent"
android:layout_width="wrap_content" />
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Aggiungi"
android:id="@+id/addSistemaAlimentazione" />
</LinearLayout>
<LinearLayout
android:baselineAligned="false"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<fragment android:name="it.cpmapave.mt.ui.intervento.SistemaAlimentazioneListFragment_"
android:layout_width="0dp"
android:tag="sistemiList"
android:layout_height="match_parent"
android:layout_weight="1" />
<FrameLayout android:id="@+id/item_detail_container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3" />
</LinearLayout>
업데이트 조각 C.
에 조각 목록 B 업데이트 세부 사항에서 요소를 선택하면 FragmentList B를 조각 A의 회 전자에서 요소를 추가 : 여기 레이아웃입니다이 문제는 중첩 된 조각으로 인해 발생할 수 있다고 생각합니다.하지만 다른 방식으로 설계하는 것이 어떨지는 모르겠지만 어쩌면 실제로 그 것보다 더 어렵게 만들 수 있습니다.
저는 ActionBarSherlock을 사용하고 있다는 코드를 생략하고 설명하기 위해 내 문제의 원인이 아닌 것으로 생각하기 때문에 생략했습니다!
그래서 마지막에 .. 질문은 :
내가 한 두 번째 사진에서 보여 같은 기능적인 레이아웃을 받아야합니다. 그러나 중첩 된 단편들에 의해서만 그것을 얻었습니다. 나는 그것을하지 말아야합니다. 어떻게해야합니까?
는 마르코
프래그먼트가 잠시 멈추고 다시 시작되지 않기 때문에 탭 활동에서 숨기고 표시하는 것이 좋지 않습니다. 내 값이 db에 저장되지 않습니다. – gipinani
무엇이 질문입니까? – vikki
두 번째 그림에 표시된 것과 같은 기능적 레이아웃을 얻어야합니다. 그러나 중첩 된 단편들에 의해서만 그것을 얻었습니다. 나는 그것을하지 말아야합니다. 어떻게해야합니까? – gipinani