Syn*_*ror 50 java android fragment android-activity
在我的活动中:
public class tabsmain extends Activity{
public static Context appContext;
public boolean lf_ch=false;
public void onCreate(Bundle savedInstanceState){
Run Code Online (Sandbox Code Playgroud)
我想访问并可能从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);
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法访问lf_ch的值.
小智 60
试试这个:
public View onCreateView(...){
tabsmain xxx = (tabsmain)getActivity();
lc.setChecked(xxx.lf_ch);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ail 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
Run Code Online (Sandbox Code Playgroud)
小智 17
如果您使用的是 Java,则可以使用
((YourActivityName)getActivity()).variableName
Run Code Online (Sandbox Code Playgroud)
访问,如果您使用的是 Kotlin,则可以使用
(activity as YourActivityName).variableName
Run Code Online (Sandbox Code Playgroud)
如果变量在 kotlin 中定义为 null,则您还必须尝试以下每种方法:-
(activity as? YourActivityName).variableName
(activity as? YourActivityName)!!.variableName
Run Code Online (Sandbox Code Playgroud)
如果可能,或者必须使用 let 块。
选择适合您的一款!
希望,它会有所帮助。
您可以为此任务创建一个接口,该接口将从任何活动中获取字符串数据到您的 Fragment。按着这些次序。
创建接口
public interface MyResultReceiver{
public String getResult();
}
Run Code Online (Sandbox Code Playgroud)
成为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);
}
}
Run Code Online (Sandbox Code Playgroud)
MyResultReceiver在Activity中实现并覆盖方法
public class tabsmain extends Activity implements MyResultReceiver{
public boolean lf_ch=false;
// Activity code
@Override
public boolean getResult(){
return lf_ch;
}
}
Run Code Online (Sandbox Code Playgroud)
对于这种情况,您可能会发现它有点冗长。但是这种方法的优点是,如果您想将此代码重用于另一个活动。您将不必再次编写相同的逻辑。只需MyResultReceiver在您的活动中实现 ,覆盖该方法,您就可以开始了。
提示:为了能够获取任何类型的数据,将接口中的方法定义
从 public String getResult(); 更改为 public Object getResult();
| 归档时间: |
|
| 查看次数: |
59374 次 |
| 最近记录: |