在我的Android代码中,我需要将Activity
转换为Fragment
。问题是我必须管理视图,但不知道如何操作。这里是我的Fragment
代码的假设。但是我不知道怎么了。
我认为MyView.java
中可能有问题。
MyActivity.java
public class MyActivity extends AppCompatActivity {
private MyView myView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
myView = new MyView(this, size.x, size.y);
setContentView(gameView);
}
@Override
protected void onPause() {
...........
}
@Override
protected void onResume() {
...........
}
}
MyView.java
public GameView(MyActivity context, int screenX, int screenY) {
super(context);
}
MyFragment.java
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_game, container, false);
Display display = getActivity().getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
myView = new MyView(this, size.x, size.y);
return myView;
}
答案 0 :(得分:1)
根据您为MyView发布的代码,其构造函数的第一个参数必须为MyActivity
实例:
public GameView(MyActivity context, int screenX, int screenY) { ... }
这就是为什么在使用“活动”时传递this
可以起作用的原因,但是在使用片段时现在不起作用。但是,您始终可以通过调用getActivity()
来获取片段的活动。由于您的视图特别需要MyActivity
而不是通用的Activity
或Context
,因此您必须将getActivity()
的结果转换为正确的类型。
因此,在您的片段中,替换为:
myView = new MyView(this, size.x, size.y);
与此:
MyActivity activity = (MyActivity) getActivity();
myView = new MyView(activity, size.x, size.y);