1

我有一个延伸到片段的类,一旦点击它就会初始化一个延伸到活动的新类。我想在按钮点击时将数据(例如字符串)从该活动传递回调用者片段。

FirstActivity 扩展片段

点击按钮

Intent startcontact = new Intent(getActivity(), Contact.class);
                getActivity().startActivityForResult(startcontact,1);

联系扩展活动

点击按钮

Bundle bundle = new Bundle();
                 bundle.putString("ListofContacts", tapo1);
                 Intent intent = new Intent(Contact.this, First_Activity.class);
                 intent.putExtras(bundle);
                 setResult(RESULT_OK);
                 startActivity(intent);
                 finish();

FirstActivity onactivityresult

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
         MultiAutoCompleteTextView txtPhoneNo = (MultiAutoCompleteTextView) getActivity().findViewById(R.id.txtPhoneNo);
         String strtxt = null;
         if (requestCode == 1) 
         {
            if(resultCode == getActivity().RESULT_OK)
            {
             strtxt=data.getStringExtra("ListOfContacts");
             txtPhoneNo.setText(strtxt);
            }
         }
    }

当我尝试单击联系人类中的按钮时,出现错误:

ClassCastException: FirstActivity cannot be cast to android.app.activity

请帮忙!

日志猫:

08-15 23:26:39.153: E/AndroidRuntime(21267): FATAL EXCEPTION: main
08-15 23:26:39.153: E/AndroidRuntime(21267): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.john/com.example.john.First_Activity}: java.lang.ClassCastException: com.example.john.First_Activity cannot be cast to android.app.Activity
08-15 23:26:39.153: E/AndroidRuntime(21267):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2001)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at android.app.ActivityThread.access$600(ActivityThread.java:134)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at android.os.Looper.loop(Looper.java:154)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at android.app.ActivityThread.main(ActivityThread.java:4624)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at java.lang.reflect.Method.invokeNative(Native Method)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at java.lang.reflect.Method.invoke(Method.java:511)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at dalvik.system.NativeStart.main(Native Method)
08-15 23:26:39.153: E/AndroidRuntime(21267): Caused by: java.lang.ClassCastException: com.example.john.First_Activity cannot be cast to android.app.Activity
08-15 23:26:39.153: E/AndroidRuntime(21267):    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
08-15 23:26:39.153: E/AndroidRuntime(21267):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1992)
08-15 23:26:39.153: E/AndroidRuntime(21267):    ... 11 more
4

4 回答 4

0

意图需要一个活动。如果您不想将 FirstActivity 更改为 Activity,而是希望将其保留为片段,则可以执行片段事务而不是意图来推送片段。下面是执行此操作的以下代码:

final FragmentManager manager = getSupportFragmentManager();
FirstActivity fragment = new FirstAcitivty();
final FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.content_frame, mArticleFragment, null);
transaction.commit();

您想要将此片段放入的活动也需要一个 FrameLayout,这是一个将片段膨胀到的地方。您可以像这样将 FrameLayout 添加到您的 xml 中:

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

如果您在活动的 xml 中放入一个硬编码的片段,那么您将无法进行事务,因此请确保您切换到为片段充气的地方的 FrameLayout。

于 2013-08-15T14:55:04.400 回答
0

你不应该重新开始First_Activity。您应该只调用finish()返回First_Activity并将您想要的字符串传递给该类,如下所示:

Intent intent = new Intent();
intent.putExtra("ListofContacts", tapo1);
setResult(1, intent);
finish();

并且onActivityResult您将能够从data.

于 2013-08-15T14:58:41.193 回答
-2

您在 Fragment FirstActivity.class 中使用 onActivityResult 但只有 Activity 类可以使用此方法并接收结果代码,而不是 Fragment。您可以使用标志来检查值的变化,然后签入 Fragment FirstActivity.class 中的 onResume()

于 2013-08-15T14:30:44.633 回答
-2

好的好的我改变我的答案然后:

根据您没有使用“活动”扩展类的错误。您的 FirstActivity 的类型是 Fragment。所以你现在有两个选择:

1:FirstActivity扩展Activity

2:FirstFragment 扩展了 Fragment


基本概念是拥有一个为您托管片段容器的活动。然后你有你单独的片段类,其中包含构建片段(的视图)的所有必要内容。Activity 的 FragmentManager 处理片段内容的加载。
这对你有帮助吗?

于 2013-08-15T14:33:46.577 回答