簡體   English   中英

在靜態方法中訪問getActivity()

[英]Access getActivity() inside static method

我這里有這個類調用方法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
            }
        });
    }
}

我的目標是在單擊按鈕將新的Serial添加到List后,我可以回到上一個菜單

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

不能從靜態上下文引用,我不知道如何使靜態類非靜態? 我有一些全局標志,我在靜態類中使用它們(有2個),從導出起來有點痛苦

public class PointCreation(int something) extends Fragment 

是我不能做的事情。

您可以從視圖中獲取活動:

Activity activity = (Activity)view.getContext()

如果您使用FragmentActivity(似乎是這樣),那么將Context轉換為FragmentActivity(而不是常規Activity),並且您還可以調用getSupportFragmentManager()

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

您無法從靜態對象引用到非靜態對象。 首先,我想到的是為你的片段使用單例模式。 換句話說,添加片段singleton片段:

    static PointsList instance;

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

並在您的片段onCreate方法中將其分配給實例:

instance = this;

之后,您可以從setPoint方法中刪除static修飾符。 並從項目的任何部分調用它,如PointsList.getInstance().setPoint();

ps你必須使用靜態目標? 你應該非常小心地使用static ,很多事情可以通過單例而不是使用靜態來完成。

你可以使用下面的代碼;

private static FragmentActivity myContext;

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

您可以將myContext用作Context

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM