【问题标题】:Android - Launch Fragment from ActivityAndroid - 从 Activity 启动 Fragment
【发布时间】:2014-12-14 13:11:58
【问题描述】:

我正在尝试从 Activity 启动片段(列表视图)。 当单击按钮时,开关应该启动。

我的Activity从Activity扩展,Fragment扩展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);

意图尝试的错误:

找不到明确的活动类

我知道我不必将 Fragments 添加到 AndroidManifest

感谢大家的建议

编辑:待启动片段源

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

}

【问题讨论】:

  • startActivity() 是启动一个活动,而不是显示一个片段。请完整而准确地解释您在第一种方法中遇到的问题,这似乎更有可能是正确的。
  • 错误:'必须实现 OnFragmentInteractionListener' 调试器位于方法“onAttach”的片段中
  • Android SDK 中没有名为OnFragmentInteractionListener 的内容。 “调试器位于方法“onAttach”的片段中”——我们看不到该方法,因为我们没有您的片段的源代码。
  • @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (OnAusgabenInteractionListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnFragmentInteractionListener"); } } 如何正确发布代码?
  • Android SDK 中没有名为OnFragmentInteractionListener 的内容。 Android SDK 中也没有名为OnAusgabenInteractionListener 的内容。 “我如何正确发布代码?” -- 标签下方有一个“编辑”链接,就在您的问题下方。

标签: java android android-fragments


【解决方案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,无论是什么。

【讨论】:

  • 如果我删除这段话?我正在做一个费用管理器,在我添加费用后,我想在列表中显示带有新添加费用的 List-Fragment 我不明白为什么我需要一个 InteractionListener 来切换视图
  • @newclear:“我不明白为什么我需要一个 InteractionListener 来切换视图”——那你为什么要写那个代码?把代码放在那里的是你,而不是我。
  • 这一段是自动添加的。好的我删除了段落Error: No view found for id for fragment AusgabenFragment 好的我想我需要在被调用的Fragment的xml中添加一个ID或TAG
猜你喜欢
  • 2016-12-19
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2012-02-03
  • 1970-01-01
相关资源
最近更新 更多