在我的活动中:
public class tabsmain extends Activity{
public static Context appContext;
public boolean lf_ch=false;
public void onCreate(Bundle savedInstanceState){
我想访问并可能从tabsmain;
中的片段更改lf_chpublic class tabquests extends Fragment{
public CheckBox lc;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)//onCreateView
{
lc.setChecked(//set it to lf_ch);
但是,我似乎无法访问lf_ch的值。
答案 0 :(得分:57)
试试这个:
public View onCreateView(...){
tabsmain xxx = (tabsmain)getActivity();
lc.setChecked(xxx.lf_ch);
}
答案 1 :(得分:22)
我知道这是一个老问题,但是这里有一个简单的答案,可以在不跳过任何环节的情况下工作。在你片段中,定义一个变量,该变量是片段将在onCreateView中的Activity,将变量连接到活动,然后你有一个可以获取主活动中任何公共变量的引用。当我到这里时,我已经忘记了它。由于您需要找到显示的确切片段,因此执行其他方式有点困难。但是,你不应该以另一种方式去做,因为你可以轻松地来回传递信息。我希望这可以帮助遇到它的任何人。
public Quiz_Avtivity mainQuiz;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_quiz, container, false);
mainQuiz = (Quiz_Avtivity) getActivity();
//Below is where you get a variable from the main activity
mainQuiz.AnyPublicVariable = whatEver;
//also
whatEver = mainQuiz.AnyPublicVariable
答案 2 :(得分:11)
如果您使用的是Java,则可以使用
((YourActivityName)getActivity()).variableName
访问,如果您使用的是Kotlin,则可以使用
(activity as YourActivityName).variableName
如果在kotlin中将变量定义为null,则还必须尝试以下每种方法:-
(activity as? YourActivityName).variableName
(activity as? YourActivityName)!!.variableName
,或者如果可能,必须使用let块。
为您选择正确的一个!
希望,会有所帮助。
答案 3 :(得分:4)
在片段中获取活动值。
(((MainActivity)getActivity())。mGoogleApiClient;
答案 4 :(得分:2)
从活动中获取数据的另一种方法是通过以下方式访问活动的意图:
getActivity.getIntent().getExtras();
等等。
如果你在xml中使用片段启动活动,并希望以某种方式控制片段的onCreate()行为,那么它会非常有用。
PS:因为你应该首先提出意图
答案 5 :(得分:0)
尝试tabsmain.appContext.lf_ch
会给出该变量的值。
同样在该活动中设置appContext = this
答案 6 :(得分:0)
试试这个
public boolean lf_ch=false;
public class tabsmain extends Activity{
public static Context appContext;
public void onCreate(Bundle savedInstanceState){
答案 7 :(得分:0)
您可以尝试以下方法:
lc.setChecked(((yourpackagename)getActivity()).lf_ch);
答案 8 :(得分:0)
尝试这样的事情:
ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);
答案 9 :(得分:0)
您可以为此任务创建一个接口,该接口将从任何Activity到您的Fragment中获取String数据。请按照下列步骤。
创建界面
public interface MyResultReceiver{
public String getResult();
}
使MyResultReceiver
为您的片段成员
public class tabquests extends Fragment{
public CheckBox lc;
public MyResultReceiver resultreceiver;
@Override
public void onAttach(Context context){
super.onAttach(cotext);
resultreceiver = (MyResultReceiver)context;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)//onCreateView
{
YourFragment code code
Boolean result = resultreceiver.getResult();
lc.setChecked(result);
}
}
在“活动”中实施MyResultReceiver
并覆盖方法
public class tabsmain extends Activity{
public boolean lf_ch=false;
// Activity code
@Override
public boolean getResult(){
return lf_ch;
}
}
在这种情况下,您可能会发现它有点冗长。但是这种方法的优点是,如果您想将此代码重用于其他活动。您将不必再次编写相同的逻辑。只需在您的活动中实现MyResultReceiver
,重写该方法,您就可以进行了。
提示:要获取任何类型的数据,请在界面中更改方法定义
从 public String getResult();
到 public Object getResult();
答案 10 :(得分:0)
访问片段中的Activity变量以使用静态关键字,如下所示:
MainActvity.java
public static boolean lf_ch=false;
tabquestsFragment.java
boolean if_value=MainActvity.lf_ch;
希望对您有帮助
答案 11 :(得分:0)
请注意,您的片段在活动之前加载。因此,您必须致电
tabsmain tabsm=(tabsmain) getActivity();
onActivityCreated()
方法中的行
答案 12 :(得分:0)
解决方案:您可以尝试一下。
在tabquests片段中使用它,
public class tabquests extends Fragment{
private tabsmain tabsmainActivity;
public CheckBox lc;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container,Bundle savedInstanceState)//onCreateView
{
tabsmainActivity = (tabsmain)getActivity; //typecasting
//now you can access the variables of tabsmain activity and make
//sure you give them public access in the activity`
tabsmainActivity.lf_ch; //or do whatever operation you want here.
lc.setChecked(//set it to lf_ch);
}
答案 13 :(得分:-1)
变化:
public boolean lf_ch=false;
:public static boolean lf_ch=false;
您可以使用以下代码访问/更改值:tabsmain.lf_ch