Как динамически установить кнопку под моим YoutubePlayerFragment?(Настройка layoutParams не работает) - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь динамически добавлять видео YouTube в свое приложение, и проблема в том, что я не могу добавить что-то ниже YoutubePlayerFragment по какой-то причине.Я попытался использовать линейный макет (по вертикали), но кнопка все еще была над фрагментом.

Вот код Java, который имеет метод addTemplate, который динамически добавляет шаблон в представление.

package com.example.shreyass.yourbigday;

import android.app.FragmentManager;
import android.support.v4.app.Fragment;
import android.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.LayoutDirection;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerFragment;
import com.google.android.youtube.player.YouTubePlayerView;
import com.google.android.youtube.player.YouTubeThumbnailLoader;
import com.google.android.youtube.player.YouTubeThumbnailView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

YouTubePlayerFragment videoOne;
Button playVideoOne;
RelativeLayout rlOne;
YouTubeThumbnailView.OnInitializedListener onThumbnailInitializedListener;

YouTubePlayerFragment videoTwo;
Button playVideoTwo;
YouTubePlayer.OnInitializedListener mOnInitializedListener;
YouTubeThumbnailView youTubeThumbnailView;

ArrayList<String> videoIds;

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

    videoIds = new ArrayList<>();

    rlOne = (RelativeLayout) findViewById(R.id.rlOne);

    mOnInitializedListener = new YouTubePlayer.OnInitializedListener() {
        @Override
        public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
            youTubePlayer.loadVideo("rb8RlSVua00");
        }

        @Override
        public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

        }
    };
    addTemplate(rlOne);
}

public void addTemplate(RelativeLayout relativeLayout){
    final YouTubePlayerFragment ytFragment = new YouTubePlayerFragment();
    Button playButton = new Button(this);
    Button playButton2 = new Button(this);
    VideoTemplate videoTemplate =  new VideoTemplate(ytFragment,playButton);

    FragmentManager fragMan = getFragmentManager();
    FragmentTransaction fragTransaction = fragMan.beginTransaction();

    fragTransaction.add(relativeLayout.getId(),videoTemplate.getYtFragment());
    fragTransaction.commit();



    relativeLayout.addView(playButton);
    playButton.setText("Play");
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) playButton.getLayoutParams();
    params.addRule(RelativeLayout.ALIGN_BOTTOM,videoTemplate.getYtFragment().getId());
    playButton.setLayoutParams(params);

    playButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ytFragment.initialize(youtubeConfig.getApiKey(), mOnInitializedListener);
        }
    });

}
}

addTemplate инициализирует шаблон (из отдельного класса, код которого приведен ниже) и динамически добавляет фрагмент видео и кнопку воспроизведения в макет.Прямо сейчас, это просто вызывается в OnCreate один раз для целей тестирования.

Класс, который имеет определение шаблона для повторного использования-

package com.example.shreyass.yourbigday;

import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.google.android.youtube.player.YouTubePlayerFragment;


public class VideoTemplate {
private YouTubePlayerFragment ytFragment;
private Button playButton;
private RelativeLayout previousLayout;


public YouTubePlayerFragment getYtFragment() {
    return ytFragment;
}
public void setYtFragment(YouTubePlayerFragment ytFragment) {
    this.ytFragment = ytFragment;
}
public VideoTemplate(YouTubePlayerFragment ytFragment, Button playButton) {
    this.ytFragment = ytFragment;
    this.playButton = playButton;
}

public Button getPlayButton() {
    return playButton;
}

public void setPlayButton(Button playButton) {
    this.playButton = playButton;
}
}

Прямо сейчас, кнопка добавляется сверхуфрагмента Player, вместо выше или ниже его.

...