Конвертировать активность Android во фрагмент - PullRequest
0 голосов
/ 23 сентября 2018

В моем коде 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 голосов
/ 24 сентября 2018

В соответствии с кодом, который вы опубликовали для MyView, первым аргументом его конструктора должен быть MyActivity экземпляр:

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

Именно поэтому передача this сработалакогда вы использовали Activity, но теперь не работаете, когда используете Fragment.Однако вы всегда можете получить активность фрагмента, вызвав 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...