Начать фрагмент через Intent внутри фрагмента
Я хочу запустить новый фрагмент для просмотра некоторых данных. В настоящее время у меня есть основное действие, которое содержит кучу вкладок в панели действий, каждый из которых является фрагментом. Итак, внутри фрагмента вкладки у меня есть кнопка, chartButton. У меня есть мой onclicklistener для всех, и здесь метод onClick:
public OnClickListener chartsListener = new OnClickListener() {
@Override
public void onClick(View v) {
Intent chartFragment = new Intent();
startActivity(chartFragment);
}
};
Теперь, как я уже сказал, этот слушатель находится внутри класса, который расширяет фрагмент. Итак, я хочу запустить новый фрагмент (chartFragment) с намерением заменить весь экран. Когда пользователь нажмет на него, он вернет их на вкладки и основное действие. Здесь мой фрагмент диаграммы:
public class chartsFragment extends Fragment {
public View onCreateView() {
//LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return (inflater.inflate(R.layout.chartfragment, null));
}
}
Текущая ошибка, с которой я имею дело: "android.content.ActivityNotFoundException: для управления Intent {}" не найдено никаких действий. Это прекрасно, я понимаю, что я мог бы использовать getActivity(). StartActivity (chartsFragment), но это приводит к той же ошибке. Я предполагаю, что я ищу здесь, как мне запустить намерение из фрагмента, что приводит к открытию нового фрагмента?
Ответы
Ответ 1
Вы не можете открывать новые фрагменты. Фрагменты должны всегда размещаться в виде активности. Если фрагмент находится в одном и том же действии (например, вкладки), тогда навигационная панель будет сложной, я предполагаю, что вы хотите открыть новый экран с этим фрагментом.
Итак, вы просто создадите новую активность и разместите там новый фрагмент. Затем эта деятельность будет реагировать на намерение либо явно через класс активности, либо неявно через intent filter
s.
Ответ 2
Ответ на вашу проблему прост: замените текущий Fragment
на новый Fragment
и нажмите транзакцию на стопку. Это сохраняет поведение кнопки обратной связи...
Создание нового Activity
действительно побеждает целую цель использования фрагментов в любом случае... очень результативно.
@Override
public void onClick(View v) {
// Create new fragment and transaction
Fragment newFragment = new chartsFragment();
// consider using Java coding conventions (upper first char class names!!!)
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
}
http://developer.android.com/guide/components/fragments.html#Transactions
Ответ 3
Попробуйте это, это может вам помочь:
public void ButtonClick(View view) {
Fragment mFragment = new YourNextFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, mFragment).commit();
}
Ответ 4
Попробуйте это, это может вам помочь:
private void changeFragment(Fragment targetFragment){
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.main_fragment, targetFragment, "fragment")
.setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.commit();
}