72

在活动中我有:

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

4

14 回答 14

64

尝试这个:

public View onCreateView(...){
  tabsmain xxx = (tabsmain)getActivity();
  lc.setChecked(xxx.lf_ch);
}
于 2012-10-25T10:58:35.607 回答
32

我知道这是一个老问题,但是这是一个简单的答案,无需跳过任何环节即可工作。在您的片段中定义一个变量,该变量是片段将在其中的活动,然后在 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
于 2016-03-21T19:04:39.793 回答
24

如果您使用的是 Java,则可以使用

((YourActivityName)getActivity()).variableName

访问,如果你使用 Kotlin,你可以使用

(activity as YourActivityName).variableName

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

(activity as? YourActivityName).variableName

(activity as? YourActivityName)!!.variableName

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

为您选择正确的!

希望,它会有所帮助。

于 2020-01-10T05:19:07.453 回答
6

制作一个通用的 Result 接收器

在此处输入图像描述

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

创建接口

public interface MyResultReceiver{

      public String getResult();     

} 

成为MyResultReceiver您的 Fragment 的成员

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在Activity中实现并覆盖方法

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

于 2019-01-27T14:45:49.477 回答
5

取片段中的 Activity 值。

((MainActivity) getActivity()).mGoogleApiClient;

于 2018-07-17T11:11:42.703 回答
3

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

getActivity.getIntent().getExtras();

等等。

如果您在 xml 中使用片段开始活动,并且希望以某种方式控制片段的 onCreate() 行为,这将很有用。

PS:当然你应该先把一些东西放在意图上

于 2015-08-06T13:35:55.947 回答
2

您可以尝试以下方法:

lc.setChecked(((yourpackagename)getActivity()).lf_ch);
于 2014-02-19T05:46:35.557 回答
0

try this

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

    public static Context appContext;
    public void onCreate(Bundle savedInstanceState){
于 2013-06-06T20:34:57.503 回答
0

尝试tabsmain.appContext.lf_ch会给你该变量的值。

也在那个活动集中appContext = this

于 2012-10-25T11:00:58.040 回答
0

请注意,您的片段在活动之前加载。所以,你必须打电话给

tabsmain tabsm=(tabsmain) getActivity();

线入onActivityCreated()

于 2019-01-30T13:49:39.457 回答
0

尝试这样的事情:

    ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);
于 2017-05-31T09:01:57.573 回答
0

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

MainActivity.java

public static boolean lf_ch=false;

tabquestsFragment.java

boolean if_value=MainActvity.lf_ch;

希望对你有帮助

于 2019-01-29T12:45:04.827 回答
0

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

在 tabquests Fragment 中使用这个,

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);
    }
于 2020-05-08T07:07:22.820 回答
-1

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

于 2013-07-09T22:03:27.680 回答