将Android活动转换为片段

时间:2018-09-23 19:57:14

标签: android android-fragments

在我的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;
    }

1 个答案:

答案 0 :(得分:1)

根据您为MyView发布的代码,其构造函数的第一个参数必须为MyActivity实例:

public GameView(MyActivity context, int screenX, int screenY) { ... }

这就是为什么在使用“活动”时传递this可以起作用的原因,但是在使用片段时现在不起作用。但是,您始终可以通过调用getActivity()来获取片段的活动。由于您的视图特别需要MyActivity而不是通用的ActivityContext,因此您必须将getActivity()的结果转换为正确的类型。

因此,在您的片段中,替换为:

myView = new MyView(this, size.x, size.y);

与此:

MyActivity activity = (MyActivity) getActivity();
myView = new MyView(activity, size.x, size.y);