java-如何从片段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的值。

Syntax_Error asked 2020-02-21T17:00:00Z
12个解决方案
59 votes

尝试这个:

public View onCreateView(...){
  tabsmain xxx = (tabsmain)getActivity();
  lc.setChecked(xxx.lf_ch);
}
David M answered 2020-02-21T17:00:11Z
22 votes

我知道这是一个古老的问题,但是这是一个简单的答案,可以轻松完成工作。 在您的Fragment中定义一个变量,该变量是该片段将要位于的Activity,然后在onCreateView中将变量连接到Activity,然后您可以得到一个引用,该引用可以访问main活动中的任何公共变量。 当我在这里结束时,我已经忘记了它。 由于您需要找到所显示的确切片段,因此以其他方式进行操作有些困难。 但是,您不必这样做,因为您可以轻松地来回传递信息。 我希望这会对遇到的任何人有所帮助。

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
Mark Dail answered 2020-02-21T17:00:32Z
4 votes

将活动值分段。

((先生)切刀())。 go

Sanjay Goswami answered 2020-02-21T17:00:57Z
3 votes

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

getActivity.getIntent().getExtras();

等等。

如果您以xml中的片段开始活动,并且想以某种方式控制片段的onCreate()行为,则它可能会很有用。

PS:当然,您应该首先提出一些意图

Penzzz answered 2020-02-21T17:01:31Z
1 votes

您可以尝试以下方法:

lc.setChecked(((yourpackagename)getActivity()).lf_ch);
Vigneshwaran.m answered 2020-02-21T17:01:51Z
0 votes

尝试appContext = this将为您提供该变量的值。

同样在该活动中设置appContext = this

Sumant answered 2020-02-21T17:02:16Z
0 votes

尝试这个

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

    public static Context appContext;
    public void onCreate(Bundle savedInstanceState){
luchito answered 2020-02-21T17:02:36Z
0 votes

尝试这样的事情:

    ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);
Ashish Gupta answered 2020-02-21T17:02:55Z
0 votes

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

MainActvity.java

public static boolean lf_ch=false;

tabquestsFragment.java

boolean if_value=MainActvity.lf_ch;

希望对您有帮助

Android Geek answered 2020-02-21T17:03:28Z
0 votes

制作通用结果接收器

enter image description here

您可以为此任务创建一个接口,该接口将从任何“活动”中获取字符串数据到您的“片段”。 按着这些次序。

创建一个界面

public interface MyResultReceiver{

      public String getResult();     

} 

使public String getResult();成为片段的成员

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

     }

}

在Activity中实现public String getResult();并覆盖方法

public class tabsmain extends Activity{

        public boolean lf_ch=false;

        // Activity code


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

 }

免责声明:

在这种情况下,您可能会发现它有点冗长。 但是这种方法的优点是,如果您想将此代码重用于其他活动。 您将不必再次编写相同的逻辑。 只需在您的活动中实施public String getResult();,覆盖该方法,您就会很轻松。

提示:为了能够获取任何类型的数据,请在界面中更改方法定义
public String getResult();public Object getResult();

Rohit Singh answered 2020-02-21T17:04:24Z
0 votes

请注意,您的片段在活动之前加载。 因此,您必须致电

tabsmain tabsm=(tabsmain) getActivity();

onActivityCreated()方法中的行

The Godfather answered 2020-02-21T17:04:48Z
-1 votes

更改:public boolean lf_ch=false;至:public static boolean lf_ch=false;您可以通过以下方式访问/更改值:tabsmain.lf_ch

stalker answered 2020-02-21T17:05:08Z
translate from https://stackoverflow.com:/questions/13067033/how-to-access-activity-variables-from-a-fragment-android