Подтвердить что ты не робот

Начать фрагмент через 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), но это приводит к той же ошибке. Я предполагаю, что я ищу здесь, как мне запустить намерение из фрагмента, что приводит к открытию нового фрагмента?

4b9b3361

Ответ 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();

}