5

Używam ActionBarSherlock, nie jestem w stanie iść do klasy, która rozciąga SherlockFragment z działalnościJak przejść do fragmentu z działalności

trzeba przenieść z działalności klasy fragmentu

Oto moja klasa aktywny

Intent notificationIntent = new Intent(context,MessagesFragment.class); 

I klasa Fragment jest jak

public class MessagesFragment extends SherlockFragment implements 
    OnItemClickListener { 

// Layout parameters declaration 
private PullToRefreshListView lv_messages; 
private ImageView iv_no_data; 
private LinearLayout ll_bg; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    getSherlockActivity().getSupportActionBar().setDisplayOptions(
      ActionBar.DISPLAY_SHOW_CUSTOM); 
    getSherlockActivity().getSupportActionBar().setDisplayHomeAsUpEnabled(
      true); 
    getSherlockActivity().getSupportActionBar().setHomeButtonEnabled(true); 
    getSherlockActivity().getSupportActionBar().setDisplayShowHomeEnabled(
      true); 
    getSherlockActivity().getSupportActionBar().setCustomView(
      R.layout.header); 
    getSherlockActivity().getSupportActionBar().setBackgroundDrawable(
      new ColorDrawable(Color.parseColor("#009fe3"))); 
    TextView txt = (TextView) getActivity().findViewById(
      R.id.tv_title_header); 
    Typeface font = Typeface.createFromAsset(getActivity().getAssets(), 
      "georgia.ttf"); 
    txt.setText("MESSAGES"); 
    txt.setTypeface(font); 
    return inflater.inflate(R.layout.listview_refreshable, null); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 
. 
. 
. 
. 
} 

Jeśli używam switchfragment sposób pokazuje wiele błędów w FragmentChangeActivity

private void switchFragment(Fragment fragment) { 
    if (getActivity() == null) 
     return; 

    if (getActivity() instanceof FragmentChangeActivity) { 
     FragmentChangeActivity fca = (FragmentChangeActivity) getActivity(); 
     fca.switchContent(fragment); 

    } 
} 
+1

Nie mam pojęcia, co dokładnie pytasz. ActionbarSherlock obsługuje fragmenty, a jeśli przejdziesz do jego githuba, znajdziesz mnóstwo przykładów z nich korzystających. –

+0

Nie mogłem przejść od działania do fragmentu klasy – sarabu

Odpowiedz

11

Trzeba utworzeniu klasy, która rozciąga FragmentActivity i rozpocząć yourfragment tam

public class MessagesFragmentActivity extends SherlockFragmentActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (savedInstanceState == null){ 
      getSupportFragmentManager().beginTransaction() 
        .add(android.R.id.content, new MessagesFragment()).commit();} 
    } 
} 

konstruktora fragmentu.

public YourFragment() { 
} 

następnie z dzwonisz aktywność, rozpocząć działalność fragment w normalny sposób

Intent i = new Intent(YourActivity.this,MessagesFragment.class); 
startActivity(i); 
+0

Działa, to prowadzi mnie do innej czynność. Dużo walczę o ten kod. – sarabu

0

Nie można tego zrobić. Ponieważ każdy Fragment był zawarty w Aktywności, więc możesz po prostu przeskoczyć do Aktywności, która zawiera ten Fragment.

1

Użyj FragmentTransaction, aby przejść do dowolnego fragmentu, który chcesz. Jeśli masz kilka Fragmentów, ta metoda przełącza się między nimi.

Oto kierunek:

public enum FragmentsAvailable {  
HISTORY 
} 


public class MyActivity extends FragmentActivity 
... 

private void changeFragment(Fragment newFragment, FragmentsAvailable newFragmentType, boolean withoutAnimation) { 


    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 


    try { 
     getSupportFragmentManager().popBackStackImmediate(newFragmentType.toString(), FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    } catch (java.lang.IllegalStateException e) { 

    } 

    transaction.addToBackStack(newFragmentType.toString()); 
    transaction.replace(R.id.fragmentContainer, newFragment); 
    transaction.commitAllowingStateLoss(); 
    getSupportFragmentManager().executePendingTransactions(); 


} 
+0

gdzie zachować ten kod? w mojej działalności lub powinienem utworzyć klasę. I tutaj nie ma klasy, która mogłaby go zaliczać. – sarabu

+0

Umieszczacie to w swojej Działalności. Jestem pewien, że według słów kluczowych można znaleźć wystarczającą ilość informacji w google –

+0

To pokazuje błąd dla 'getSupportFragmentManager' – sarabu

0

Fragment jest dołączony do aktywności, można dodać fragment lub Zastąp fragment z FragmentTransition. Zauważ, że fragment musi istnieć!

Nie przechodzisz z działalności na fragment ... Ale jeśli jesteś w działaniu, które zawiera fragment, możesz otworzyć nowe działanie na pierwszym.

+0

Twoje założenie jest błędne. Możemy przejść od aktywności do fragmentu za pomocą kodu poniżej: – sarabu

+0

Oczywiście, że masz rację, ja tylko doradzam o GŁÓWNYM użyciu fragmentów. Powinieneś przyznać, że nie jest to częsty użytek. Jeśli spojrzysz na oficjalne dobre praktyki Google, fragmenty są wyraźnie przeznaczone do dostosowania interfejsu użytkownika między zestawami słuchawkowymi, tabletami i zmianami orientacji ... W przypadku głosowania odpowiedź na tego rodzaju powód jest idiotyczna:/ –

Powiązane problemy