5

Я использую ActionBarSherlock, я не могу идти в класс, который расширяет SherlockFragment от деятельностиКак перейти к фрагменту от активности

Мне нужно, чтобы перейти от деятельности к классу фрагмента

Вот мой класс активности

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

А класс фрагмент подобен

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); 
} 
. 
. 
. 
. 
} 

Если я использую switchfragment метод, который он показывает много ошибок в FragmentChangeActivity

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

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

    } 
} 
+1

Не знаю, что именно вы спрашиваете. ActionbarSherlock поддерживает фрагменты, и если вы перейдете к его github, вы найдете массу примеров, используя их. –

+0

Мне не удалось перейти от занятия к фрагменту класса – sarabu

ответ

11

Вам нужно создать класс, который расширяет FragmentActivity и начать yourfragment там

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();} 
    } 
} 

Ваш конструктор фрагмента.

public YourFragment() { 
} 

тогда от вас вызова активности, начните фрагмент активности обычным способом

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

Он работает, он меня в другой Мероприятия. Очень много борется за этот код. – sarabu

0

Вы не можете сделать это. Потому что каждый фрагмент содержался в Activity, поэтому вы можете просто перейти к Activity, который содержит этот фрагмент.

1

Используйте FragmentTransaction, чтобы перейти к любому фрагменту, который вы хотите. Если у вас есть несколько фрагментов, этот метод будет переключаться между ними.

Вот направление:

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

где хранить этот код? в моей деятельности, или я должен создать класс. И здесь нет класса даже для его прохождения. – sarabu

+0

Вы помещаете его в свою деятельность. я уверен по ключевым словам, вы можете найти достаточно информации в google –

+0

Показывает ошибку для 'getSupportFragmentManager' – sarabu

0

фрагмент присоединен к активности, вы можете добавить фрагмент или заменить фрагмент с FragmentTransition. Обратите внимание, что фрагмент нуждается в существовании!

Вы не переходите от операции к фрагменту ... Но если вы находитесь в активности, содержащей фрагмент, вы можете открыть новое действие поверх первого.

+0

Ваше предположение неверно. Мы можем перейти от действия к фрагменту по коду ниже – sarabu

+0

Конечно, вы правы, я просто даю совет об ОСНОВНОМ использовании фрагментов. Вы должны признать, что это не часто используется. Если вы посмотрите на официальные лучшие практики Google, фрагменты, очевидно, предназначены для адаптации интерфейса между гарнитурой, планшетами и изменениями ориентации ... Даун-голосование - ответ на этот вопрос - идиотский:/ –