有很多方法,但我正在使用这个:
的活动:(Main2Activity)
public class Main2Activity extends AppCompatActivity{
private String myString = "hello";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
...
}
public String getMyData() {
return myString;
}
}
片段:
public class MyFragment extends android.support.v4.app.Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Main2Activity activity = (Main2Activity ) getActivity();
String myDataFromActivity = activity.getMyData();
return view;
}
}
主要活动:
public class MainActivity extends AppCompatActivity {
-------
@Override
protected void onCreate(Bundle savedInstanceState) {
}
---
private void setupViewPager(ViewPager viewPager) {
Adapter adapter = new Adapter(getSupportFragmentManager());
adapter.addFragment(new MyFragment(), "MyFragment");
viewPager.setAdapter(adapter);
}
但是它给了我阶级施放异常:
java.lang.ClassCastException: com.example.dev03.xyz.Activities.MainActivity cannot be cast to com.example.dev03.xyz.Fragments.MyActivity
java.lang.ClassCastException: com.example.dev03.xyz.Fragments.MainActivity cannot be cast to com.example.dev03.xyz.Fragments.Main2Activity
- 包装相同。
由于
答案 0 :(得分:3)
您在MainActivity中创建了Fragment并且它属于它,因此当您使用getAcitvity()时,您将获得MainActivity而不是Main2Activity。
答案 1 :(得分:1)
尝试制作getMyData()
静态
public static String getMyData() {
return myString;
}
然后以像
这样的片段访问它Main2Activity.getMyData();
答案 2 :(得分:1)
在您的活动中,执行以下操作
MyFragment fragmentObj=new MyFragment();
Bundle args = new Bundle();
args.putString("Data_Key", string_value);
fragmentObj.setArguments(args);
现在使用FragmentTransaction
将此片段添加到堆栈。
在此之后,在您的片段类onCreateView
执行以下操作
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_xml_view, container, false);
if (getArguments() != null)
{
String valueReceived = getArguments().getString("Data_Key");
}
return rootView;
}
答案 3 :(得分:1)
创建MainActivity2
的对象并访问以下方法:
MainActivity2 mn2=new ManiActivity2();
mn2.getMyData();
答案 4 :(得分:1)
如果您想完成这项工作,您必须将myFragment保持为Main2Activity而不是MainActivity。
答案 5 :(得分:1)
创建MainActivity2的对象,只需从Fragment Class
调用getMyData方法答案 6 :(得分:1)
我搜索了一整天,最后我得到了完美的解决方案:如果有人遇到同样的问题,你可以按照这个答案。
无需在Main2Activity中创建任何方法并从MyFragment中调用它。 最佳实践是,使用startActivityForResult和onActivityResult。 这是代码:
片段:
public class MyFragment extends android.support.v4.app.Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
Intent i = new Intent(getActivity(), Main2Activity.class);
startActivityForResult(i, 1);
}
}
Main2Activity:
public class Main2Activity extends AppCompatActivity{
private String myString = "hello";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
...
Intent returnIntent = new Intent();
returnIntent.putExtra("result", selectedPath1);
returnIntent.putExtra("result2", selectedPath2);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
}
简单。