Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.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 在静态方法中访问getActivity()_Java_Android_Android Fragments_Android Fragmentactivity - Fatal编程技术网

Java 在静态方法中访问getActivity()

Java 在静态方法中访问getActivity(),java,android,android-fragments,android-fragmentactivity,Java,Android,Android Fragments,Android Fragmentactivity,我这里有一个类,它调用方法setPoint public class PointsList extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View

我这里有一个类,它调用方法setPoint

public class PointsList extends Fragment {    
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.listpoints, container, false);

    public static class PointCreation extends Fragment {
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                         Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.point_creation, container, false);
        setPoint(view, CREATE);
        return view;
    }
}

static final void setPoint(View view, int goal) {
final EditText SerialField = (EditText) view.findViewById(R.id.Serial);
    if(goal == CREATE) {
        Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
        buttonGuardar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String Serial = SerialField.getText().toString();
                pointsList.add(new Serial);
                //go back to R.layout.listpoints
            }
        });
    }
}
我的目标是在我点击按钮将新序列添加到列表后,我可以从

R.layout.point_creation to R.layout.listpoints
为了在片段之间移动,我通常使用如下内容:

            Fragment fragment = new PointsList();
            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.container, fragment)
                    .commit();
但在内部:

static final void setPoint(View view, int goal)
getActivity().getSupportFragmentManager();
不能从静态上下文引用,我不知道如何使静态类成为非静态类?我在静态类中使用了一些全局标志(有两个),这会让导出有些痛苦

public class PointCreation(int something) extends Fragment 

是我不能做的事。

您可以从视图中获取活动:

Activity activity = (Activity)view.getContext()
如果您使用FragmentActivity(看起来是这样),那么将上下文强制转换为FragmentActivity(而不是常规活动),然后您将能够调用getSupportFragmentManager()


不能从静态对象引用到非静态对象。首先,我想到的是对片段使用单例模式。换句话说,向您添加片段单例代码段:

    static PointsList instance;

    public PointsList getInstace(){
     if(instance == null){
        instance = new PointsList ();
     }
    return instance;
    }
在fragment
onCreate
方法中,将其分配给实例:

instance = this;
之后,您可以从设置点方法中删除静态修饰符。并从项目的任何部分调用它,如
PointsList.getInstance().setPoint()


p、 你必须使用静态的哪些目标?您应该非常小心地使用
static
,很多事情都可以通过单例而不是使用static来完成。

您可以通过下面的代码来使用

private static FragmentActivity myContext;

@Override
public void onAttach(Activity activity) {
    myContext = (FragmentActivity) activity;
    super.onAttach(activity);
}

您可以使用
myContext
作为
Context

使您的方法成为非静态的,将其作为活动或上下文或任何需要的参数传递给它,或者静态缓存一个
singleton
实例,您可以根据需要获取该实例。但请记住,您不仅需要拥有对象,还必须在实际适当的时间调用它,可能是从适当的线程调用它,等等。已经使所有内容都非静态,它现在像charmthen activity一样工作。??activity Fragment Fragment=new PointsList();Activity=(Activity)view.getContext();FragmentManager FragmentManager=activity.getFragmentManager();不能从静态方法调用上下文。你将如何获得这种背景并不重要。你就是做不到that@OFFmind为什么我不能使用传递给方法的视图中的上下文?如果直接传递给该方法,当然可以。我的意思是你不能从静态方法中得到它。但是,对于只有静态方法的UTIL类来说,这是一个很好的实践,因为您不需要有此类类的实例。在您的情况下-您的片段将在任何情况下创建。所以使用singleton更可取。它帮助了我,谢谢:)
private static FragmentActivity myContext;

@Override
public void onAttach(Activity activity) {
    myContext = (FragmentActivity) activity;
    super.onAttach(activity);
}