diadamalol
diadamalol

Reputation: 198

Android - Launch Fragment from Activity

i'm trying to launch a Fragment (a Listview) from an Activity. The switch should start, when a button is clicked.

My Activity extends from Activity, the Fragment extends ListFragment.

I tried

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

and

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

The error from the intent try:

Unable to find explicit activity class

I know that I dont have to add Fragments to the AndroidManifest

Thanks for all the suggestions

EDIT: to be launched Fragment Source

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

}

Upvotes: 2

Views: 364

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006779

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

This code expects the activity that is hosting the fragment to implement OnAusgabenInteractionListener. It then throws an incorrect exception, to confuse you further.

If you want to use the code, your activity will need to implement OnAusgabenInteractionListener, whatever that is.

Upvotes: 1

Related Questions