[英]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.