Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从另一个扩展类中的MainActivity访问var_Java_Android - Fatal编程技术网

Java 从另一个扩展类中的MainActivity访问var

Java 从另一个扩展类中的MainActivity访问var,java,android,Java,Android,因此,我需要从另一个类访问MainActivty中的变量。最好的方法是什么。下面是一个场景,但我不能调用frag.receiveInt(将这个\u int\u给\u片段) MainActivity.java: import com.me.fragments.FragmentExtender public class MainActivity{ int give_this_int_to_fragment; protected void onCre

因此,我需要从另一个类访问MainActivty中的变量。最好的方法是什么。下面是一个场景,但我不能调用
frag.receiveInt(将这个\u int\u给\u片段)

MainActivity.java:

    import com.me.fragments.FragmentExtender

    public class MainActivity{
        int give_this_int_to_fragment;

        protected void onCreate(...){
            Fragment frag = new FragmentExtender();
            give_this_int_to_frag = new int();
            frag.receiveInt(give_this_int_to_frag);
        }
    }
FragmentExtender.java:

    public class FragmentExtender extends Fragment{
         int receive_int_from_main;

         public View onCreateView(...){...}

         receiveInt(int_from_main){
              receive_int_from_main = int_from_main;
         }
    }

我不想创建一个重复的变量,只要在MainActivity中创建一个指向该变量的指针(如果您理解我的意思)。

在Activity中为该变量创建getter和setter

public class MainActivity{
    int give_this_int_to_fragment;

    protected void onCreate(...){
        Fragment frag = new FragmentExtender();

    }
}

public int getgive_this_int_to_fragment(){
     return give_this_int_to_fragment;
}
public void getgive_this_int_to_fragment(int var){
     give_this_int_to_fragment = var;
}
现在,在片段中,您可以使用getActivity()获取活动上下文,然后调用getter

public class FragmentExtender extends Fragment{


     public View onCreateView(...){
         //....
         int var = ((MainActivity) getActivity()).getgive_this_int_to_fragment();

     }
}

在活动中为该变量创建getter和setter

public class MainActivity{
    int give_this_int_to_fragment;

    protected void onCreate(...){
        Fragment frag = new FragmentExtender();

    }
}

public int getgive_this_int_to_fragment(){
     return give_this_int_to_fragment;
}
public void getgive_this_int_to_fragment(int var){
     give_this_int_to_fragment = var;
}
现在,在片段中,您可以使用getActivity()获取活动上下文,然后调用getter

public class FragmentExtender extends Fragment{


     public View onCreateView(...){
         //....
         int var = ((MainActivity) getActivity()).getgive_this_int_to_fragment();

     }
}

更优雅的方法是在片段中实现一个接口,并使应用程序从中继承。这样你就可以用这种方式交流了

interface FragmentInterface{
    Object getMainValue();
    void passValueToMain(Object obj);
}
使用此代码,您只需将其添加到MainActivity声明和片段构造函数中

public class MainActivity implements FragmentInterface{
    int give_this_int_to_fragment;

    protected void onCreate(...){
        Fragment frag = new FragmentExtender();
        ....
    }
}
然后在片段中

public class FragmentExtender extends Fragment{
    private FragmentInterface mInterface;
    int receive_int_from_main;

    public View onCreateView(...){...}

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        setListeners(context);
    }

    //This is for pre Marshmallow versions
    @SuppressWarnings("deprecation")
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            setListeners(activity);
        }
    }

    private void setListeners(Object object) {
        if (object instanceof FragmentInterface) {
            mListener = (FragmentInterface) object;
        } else {
            throw new RuntimeException(object.toString()
                + " must implement FragmentInterface");
        }
    }
}
公共类FragmentExtender扩展片段{
私有碎片接口mInterface;
int从_main接收_int_;
公共视图onCreateView(…){…}
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
设置侦听器(上下文);
}
//这是用于棉花糖前的版本
@抑制警告(“弃用”)
@凌驾
公共事务主任(活动){
超级转速计(活动);
if(Build.VERSION.SDK_INT

这将适用于任何片段和实现它们的任何活动。更优雅的方法是在片段中实现一个接口,并使应用程序从中继承。这样你就可以用这种方式交流了

interface FragmentInterface{
    Object getMainValue();
    void passValueToMain(Object obj);
}
使用此代码,您只需将其添加到MainActivity声明和片段构造函数中

public class MainActivity implements FragmentInterface{
    int give_this_int_to_fragment;

    protected void onCreate(...){
        Fragment frag = new FragmentExtender();
        ....
    }
}
然后在片段中

public class FragmentExtender extends Fragment{
    private FragmentInterface mInterface;
    int receive_int_from_main;

    public View onCreateView(...){...}

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        setListeners(context);
    }

    //This is for pre Marshmallow versions
    @SuppressWarnings("deprecation")
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            setListeners(activity);
        }
    }

    private void setListeners(Object object) {
        if (object instanceof FragmentInterface) {
            mListener = (FragmentInterface) object;
        } else {
            throw new RuntimeException(object.toString()
                + " must implement FragmentInterface");
        }
    }
}
公共类FragmentExtender扩展片段{
私有碎片接口mInterface;
int从_main接收_int_;
公共视图onCreateView(…){…}
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
设置侦听器(上下文);
}
//这是用于棉花糖前的版本
@抑制警告(“弃用”)
@凌驾
公共事务主任(活动){
超级转速计(活动);
if(Build.VERSION.SDK_INT

这将适用于任何片段和实现它们的任何活动

,所以您基本上希望将值从一个活动传递到另一个片段?是的。对于那些回答的人,我将尝试这两个版本,看看哪个版本最适合我的工作流程。我会回到upvote。所以你们基本上想把值从活动传递到片段?是的。对于那些回答的人,我将尝试这两个版本,看看哪个版本最适合我的工作流程。我将返回upvote。有没有不编辑片段类文件的方法?我想把东西保存在2个文件中MainActivity和FragmentExtender您可以在同一个FragmentExtender类中创建FragmentListener,但是这样在其他Fragments中重用就不那么清楚了有没有一种不编辑fragment类文件的方法?我想把东西保存在两个文件MainActivity和FragmentExtender中。您可以在同一个FragmentExtender类中创建FragmentListener,但这样在其他片段中重用就不那么清晰了