我有一个扩展到片段的类,一旦点击它就会有一个按钮初始化一个扩展到活动的新类。我想在按钮点击时将数据(例如字符串)从该活动传递回来电片段。
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
请帮助!
logcat的:
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
答案 0 :(得分: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,一个将片段膨胀到的地方。你可以像这样在你的xml中添加一个FrameLayout:
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
如果您为活动添加了一个硬编码片段的xml,那么您就无法执行该事务,因此请确保切换到FrameingFayout以便为片段充气。
答案 1 :(得分:0)
你不应该再次开始First_Activity
。你应该只是致电finish()
回到First_Activity
并将你想要的字符串传递给那个类:
Intent intent = new Intent();
intent.putExtra("ListofContacts", tapo1);
setResult(1, intent);
finish();
并且在onActivityResult
中,您将能够从data
获得所需的额外字符串。
答案 2 :(得分:-2)
您在Fragment FirstActivity.class中使用onActivityResult,但只有Activity类可以使用此方法并接收结果代码,而不是片段。您可以使用标志来检查值的变化,然后检查Fragment FirstActivity.class中的onResume()
答案 3 :(得分:-2)
好的我现在改变我的答案:
根据错误,您没有使用“Activity”扩展类。 您的FirstActivity的类型是Fragment。所以你现在有两个选择:
1:FirstActivity扩展活动
2:FirstFragment扩展Fragment
基本概念是拥有一个托管片段容器的活动。然后你有你的单独的Fragment类,它包含构建片段所需的所有东西(的视图)。活动的FragmentManager处理片段内容的加载 这对你有帮助吗?