2014-12-14 5 views
1

Я пытаюсь запустить фрагмент (список) из Activity. Переключатель должен начинаться, когда нажимается кнопка.Android - Launch Fragment from Activity

My Activity is Activities from Activity, Fragment extends ListFragment.

Я попытался

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction transaction = fragmentManager.beginTransaction(); 
AusgabenFragment ausgabenFragment = new AusgabenFragment(); 
transaction.replace(R.id.contentFragment, ausgabenFragment); 
transaction.commit(); 

и

Intent intent; 
intent = new Intent(getApplicationContext(), AusgabenFragment.class); 
startActivity(intent); 

ошибка от намерения попробовать:

Unable to find explicit activity class

Я знаю, что я не должен добавить фрагменты к AndroidManifest

г все предложения

EDIT: будет запущен Фрагмент Источник

public class AusgabenFragment extends ListFragment { 

// TODO: Rename parameter arguments, choose names that match 
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
private static final String ARG_PARAM1 = "param1"; 
private static final String ARG_PARAM2 = "param2"; 

// TODO: Rename and change types of parameters 
private String mParam1; 
private String mParam2; 

private OnAusgabenInteractionListener mListener; 

// TODO: Rename and change types of parameters 
public static AusgabenFragment newInstance(String param1, String param2) { 
    AusgabenFragment fragment = new AusgabenFragment(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

/** 
* Mandatory empty constructor for the fragment manager to instantiate the 
* fragment (e.g. upon screen orientation changes). 
*/ 
public AusgabenFragment() { 
} 

private AusgabenDataSource dataSource; 

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

    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    dataSource = new AusgabenDataSource(getActivity()); // context mit getActivity 
    try { 
     dataSource.open(); // kann Exception werfen daher try catch 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    List<Ausgaben> AusgabenList = dataSource.getAllAusgaben(); 
    setListAdapter(new ArrayAdapter<Ausgaben>(getActivity(), 
      android.R.layout.simple_list_item_1, android.R.id.text1, AusgabenList)); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     mListener = (OnAusgabenInteractionListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 


@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    Intent intent = new Intent(getActivity(),AusgabenDetailsActivity.class); 
    String Titel = l.getItemAtPosition(position).toString(); 
    intent.putExtra("value_title",Titel); 
    getActivity().startActivity(intent); 


    if (null != mListener) { 
     // Notify the active callbacks interface (the activity, if the 
     // fragment is attached to one) that an item has been selected. 

    } 
} 

public interface OnAusgabenInteractionListener { 
    // TODO: Update argument type and name 
    public void onAusgabenInteraction(String id); 
} 

}

+1

'startActivity()' - начать действие, а не показывать фрагмент. Пожалуйста, объясните ** полностью и точно **, с какими проблемами вы столкнулись в своем первом подходе, который, скорее всего, будет правильным. – CommonsWare

+0

Ошибка: «должен реализовать OnFragmentInteractionListener» Отладчик находится в фрагменте метода «onAttach» – newclear

+0

В Android SDK ничего не найдено «OnFragmentInteractionListener». «Отладчик находится в фрагменте метода« onAttach »» - мы не можем видеть этот метод, потому что у нас нет источника для вашего фрагмента. – CommonsWare

ответ

1
@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     mListener = (OnAusgabenInteractionListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

Этот код ожидает активности, на котором размещается фрагмент для реализации OnAusgabenInteractionListener. Затем он выдает неправильное исключение, чтобы запутать вас дальше.

Если вы хотите использовать код, ваша деятельность должна будет реализовать OnAusgabenInteractionListener, что бы это ни было.

+0

, если я удалю этот отрывок? Я работаю над менеджером расходов, после того как я добавлю счет, я хочу показать список-фрагмент с новыми добавленными расходами в списке . Я не понимаю, зачем мне нужен InteractionListener для переключения вида. – newclear

+0

@newclear: «I не понимаю, зачем мне нужен InteractionListener для переключения вида »- тогда почему вы записали этот код? Вы тот, кто поставил этот код там, а не я. – CommonsWare

+0

этот отрывок был автоматически добавлен. Ок, я удалил прохождение 'Ошибка: для id для фрагмента не найдено никакого представления AusgabenFragment' Хорошо, мне кажется, мне нужно добавить идентификатор или TAG в xml из вызванного фрагмента – newclear