2014-04-10 167 views
4

我这里有这个类调用该方法设定值访问getActivity()静态方法里面

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

但我nside:

static final void setPoint(View view, int goal) 
getActivity().getSupportFragmentManager(); 

不能从静态上下文中引用,我不知道如何绕过它使静态类非静态?我有我的静态类使用一些全局标志(其中有2个),这将是一个有点不好受出口,因为

public class PointCreation(int something) extends Fragment 

是我做不到的。

+0

要么让你的方法是非静态的,把它作为一个参数传递给一个Activity或Context或者它需要的东西,要么有一个静态缓存的singleton实例,你可以根据需要获得它。但请记住,您不仅必须拥有该对象,还必须在实际适当的时间调用它,方法可能来自适当的线程等。 –

+0

已使所有内容都不是静态的,它现在像一个魅力 – heisenberg

回答

18

你可以从查看活动:

Activity activity = (Activity)view.getContext() 

如果使用FragmentActivity(这好像是这样),再抹上语境FragmentActivity(而不是常规的活动),并进一步您将能够调用getSupportFragmentManager ()

FragmentActivity activity = (FragmentActivity)view.getContext(); 
FragmentManager manager = activity.getSupportFragmentManager(); 
+0

然后活动??活动 Fragment fragment = new PointsList(); Activity activity =(Activity)view.getContext(); FragmentManager fragmentManager = activity.getFragmentManager(); < - 不起作用 – heisenberg

+0

您无法从静态方法调用上下文。无论你如何获得该环境,都无关紧要。你只是不能这样做 – OFFmind

+0

@OFFmind为什么我不能使用从传递给方法的视图的上下文? – fRoStBiT

0

您无法从静态对象引用到非静态对象。首先,想到的是为你的片段使用singleton模式。换句话说添加到您分段单片段:

static PointsList instance; 

    public PointsList getInstace(){ 
    if(instance == null){ 
     instance = new PointsList(); 
    } 
    return instance; 
    } 

,并在您的片段onCreate方法将其分配给该实例:

instance = this; 

后,你可以删除设定值方法静态修改。并从您的项目的任何部分呼吁它,如PointsList.getInstance().setPoint();

p.s.静态你需要使用什么目标?你应该非常小心地使用static,许多事情可以通过单例来完成,而不是使用静态。