Хотите изменить активность на фрагмент - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу изменить свою активность на фрагмент.мой код приведен ниже.помощь будет оценена.Я провел два дня без какого-либо успеха.Я много изменил мой код выше, но не смог решить эту проблему.Последние пять строк меня сильно смущают.Я также использовал класс MediaPlayerPool, который, я думаю, не создает проблемы.

package com.example.soundpoolexample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;


public class MainActivity extends AppCompatActivity {
private MediaPlayerPool mediaPlayerPool;

Button button;
Button button2;

class b1 implements OnTouchListener {
    b1() {
    }

    public boolean onTouch(View view, MotionEvent motionEvent) {
        view.setPressed(true);
        if (motionEvent.getAction() == 0) {
            MainActivity.this.mediaPlayerPool.play("android.resource://com.example.soundpoolexample/raw/a1");
            return true;
        } else if (motionEvent.getAction() != 1 && motionEvent.getAction() != 3) {
            return false;
        } else {
            MainActivity.this.mediaPlayerPool.stop("android.resource://com.example.soundpoolexample/raw/a1");
            return false;
        }
    }
}

class b2 implements OnTouchListener {
    b2() {
    }

    public boolean onTouch(View view, MotionEvent motionEvent) {
        view.setPressed(true);
        if (motionEvent.getAction() == 0) {
            MainActivity.this.mediaPlayerPool.play("android.resource://com.example.soundpoolexample/raw/a1");
            return true;
        } else if (motionEvent.getAction() != 1 && motionEvent.getAction() != 3) {
            return false;
        } else {
            MainActivity.this.mediaPlayerPool.stop("android.resource://com.example.soundpoolexample/raw/a1");
            return false;
        }
    }
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView((int) R.layout.activity_main);

    this.button = (Button) findViewById(R.id.button);
    this.button2 = (Button) findViewById(R.id.button2);
    this.mediaPlayerPool = new MediaPlayerPool(this);
    this.button.setOnTouchListener(new b1());
    this.button2.setOnTouchListener(new b2());

}

}

1 Ответ

0 голосов
/ 12 февраля 2019

1.Создать макет фрагмента

Создать новый файл макета.

В вашем случае это будет копия текущего файла activity_main.xml.

В моем случае я простоиспользуйте красный фон.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#f00">

</FrameLayout>

2.Создать класс фрагмента

Создать новый файл класса Java.

Расширить Fragment из android.support.v4.app.Fragment и переопределить onCreateView().

public class MainFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return super.onCreateView(inflater, container, savedInstanceState);
    }
}

3.Надуйте макет

Внутри onCreateView(), надуйте и верните макет с 1.Создание фрагмента макета .

return inflater.inflate(R.layout.fragment_layout, container, false);

4.Переместите реализации из MainActivity в MainFragment

Переместите oncreate() в MainActivity реализацию в onViewCreated() в MainFragment.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    this.button = (Button) findViewById(R.id.button);
    this.button2 = (Button) findViewById(R.id.button2);
    this.mediaPlayerPool = new MediaPlayerPool(this);
    this.button.setOnTouchListener(new b1());
    this.button2.setOnTouchListener(new b2());
}

Вы должны оставить onCreate() в MainActivty какследует.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_java);
}

Переместить все остальное как есть.

5.Используйте MainFragment в MainActivity

В activity_main.xml , используйте MainFragment с тегом <fragment>.

<FrameLayout ... >

<fragment
        android:id="@+id/main_fragment"
        android:name="com.example.blockrecyclerview.MainFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>

Это приведет к следующему экрану.

Result Image

...