如何使用来自其他活动的片段启动活动 - Android

时间:2015-09-01 16:29:24

标签: android fragment

我有一个带按钮的Activity1。

单击此按钮时,我想调用Activity2:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:orientation="vertical"
    android:id="@+id/frag_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</RelativeLayout >

并在此内部&#34; frag_container&#34;我想添加一个Fragment1:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

   <ImageView 
      android:src="@drawable/ic_launcher"
      android:scaleType="fitCenter"
      android:layout_height="250px"
      android:layout_width="250px"/>

   <TextView
      android:text="Frame Demo"
      android:textSize="30px"
      android:textStyle="bold"
      android:layout_height="fill_parent"
      android:layout_width="fill_parent"
      android:gravity="center"/>
</FrameLayout>

我可以成功启动Activity2:

Intent intent = new Intent(Activity1.this, Activity2.class);
startActivity(intent);

但我不知道如何使用Fragment1启动此Activity2。

我尝试在Activity2的OnCreate中添加它:

Fragment myFrag = new Fragment1 ();
FragmentTransaction ft  = getFragmentManager().beginTransaction();
ft.add(R.id.frag_container, myFrag);
ft.commit();

但是当我调用此活动时总是崩溃。

我是Android上的新手,有人可以告诉我该怎么办?

2 个答案:

答案 0 :(得分:0)

您是否在Fragment中看到名为<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div class="footer"> <div class="contactformbox form-body"> <div class="sectionbar">Contact Us</div> abc 123 </div> </div>的界面。这是这个问题的根本原因。它没有任何问题,但你最好了解那里发生的事情。

在片段中,您还应该覆盖OnFragmentInteractionListener方法

onAttach

我们也做了类似下面的事情,

@Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        this.activity = activity;

    }

要确保接口已实现(我认为您的代码中包含上述代码。)如果没有与Fragment中的Activity进行通信,请注释掉@Override public void onAttach(Activity activity) { super.onAttach(activity); this.activity = activity; // This makes sure that the container activity has implemented // the callback interface. If not, it throws an exception try { mCallback = (OnHeadlineSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); } } 方法。

在这种情况下,您必须在Activity2上实现onAttach。然后它应该工作。我们使用此接口为Fragment与Activity进行通信。这就是我们这样做的方式。

如果你通过覆盖Fragment中的OnFragmentInteractionListener来附加活动,那意味着你必须实现接口(但除非你调用那些接口方法从Fragment回调Activity,否则无关紧要)

请查看this以了解有关碎片与活动之间沟通的更多信息。

答案 1 :(得分:-1)

使用get活动获取父活动,然后照常执行。

Intent intent = new Intent(getActivity(),  Activity2.class);
                getActivity().startActivity(intent);