如何从一个片段 Android 访问活动变量

在活动中,我有:

public class tabsmain extends Activity{
public static Context appContext;


public boolean lf_ch=false;


public void onCreate(Bundle savedInstanceState){

我想访问并可能更改来自 tabsmain 内部片段的 lf _ ch;

public 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 的值。

89735 次浏览

试试这个:

public View onCreateView(...){
tabsmain xxx = (tabsmain)getActivity();
lc.setChecked(xxx.lf_ch);
}

Try tabsmain.appContext.lf_ch将给出该变量的 u 值。

也在该活动集 appContext = this

试试这个

public boolean lf_ch=false;
public class tabsmain extends Activity{


public static Context appContext;
public void onCreate(Bundle savedInstanceState){

改变: public boolean lf_ch=false;至: public static boolean lf_ch=false; 您可以使用 tabsmain.lf_ch访问/更改该值

你可以尝试以下方法:

lc.setChecked(((yourpackagename)getActivity()).lf_ch);

从活动获取数据的另一种方法是通过以下途径访问活动的意图:

getActivity.getIntent().getExtras();

等等。

如果您使用 xml 中的片段启动活动,并希望以某种方式控制片段的 onCreate ()行为,那么它可能很有用。

附言: 当然,你首先应该把一些意图

我知道这是一个古老的问题,但这里有一个简单的答案,工作不跳过任何箍。在片段中定义一个变量,这个变量就是片段所在的 Activity,然后在 onCreateView 中将该变量连接到活动,然后就有了一个可以访问主活动中任何公共变量的引用。我来这里的时候就忘了。另一种方法有点困难,因为你需要找到正在显示的确切碎片。然而,使用这种方法,您不应该需要使用其他方法,因为您可以轻松地来回传递数据。我希望这能帮助任何人。

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

试试这样的方法:

    ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);

在片段中取活动值。

((MainActivity) getActivity ())

创建一个通用的 Result 接收器

enter image description here

您可以为此任务创建一个接口,该接口将从任何 Activity 获取 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 implements MyResultReceiver{


public boolean lf_ch=false;


// Activity code




@Override
public boolean getResult(){
return lf_ch;
}


}

免责声明:

你可能会觉得这个案子有点冗长。但是这种方法的优点是,如果您希望将此代码重用于其他活动。您将不必再次编写相同的逻辑。只要在你的活动中实现 MyResultReceiver,覆盖这个方法,你就可以开始了。

提示: 要获取任何类型的数据,请更改接口中的方法定义
public String getResult(); public Object getResult();

片段中的 Access Activity 变量使用静态关键字,如下所示:

MainActvity.java

public static boolean lf_ch=false;

Java

boolean if_value=MainActvity.lf_ch;

希望能帮到你

注意,片段是在活动之前加载的

tabsmain tabsm=(tabsmain) getActivity();

onActivityCreated()方法中的线

如果你正在使用 Java,你可以使用

((YourActivityName)getActivity()).variableName

如果你正在使用 Kotlin,你可以使用

(activity as YourActivityName).variableName

如果变量在 kotlin 中定义为 null,那么您也必须尝试以下每个方法:-

(activity as? YourActivityName).variableName


(activity as? YourActivityName)!!.variableName

或必须使用 let 块,如果可能的话。

为你选择正确的!

Hope 会有帮助的。

解决方案: 你可以试试这个。

在 tabquest 碎片使用这个,

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);
}