无法将片段视图切换到主视图

Ironmantis7x

我被困试图将片段中的内容放入android studio的主视图中。

该应用程序会编译并运行。但是,当我在导航抽屉(滑动菜单)中选择一个带有片段的列表中的项目时,该项目为空白。

我的片段包含一个嵌入式YouTube播放器。

logCat没有显示错误...

从我的代码-我在看什么是错的?

这是主要活动:

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity
        implements NavigationDrawerFragment.NavigationDrawerCallbacks {

    /**
     * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
     */
    private NavigationDrawerFragment mNavigationDrawerFragment;

    /**
     * Used to store the last screen title. For use in {@link #restoreActionBar()}.
     */
    private CharSequence mTitle;

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

        mNavigationDrawerFragment = (NavigationDrawerFragment)
                getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
        mTitle = getTitle();

        // Set up the drawer.
        mNavigationDrawerFragment.setUp(
                R.id.navigation_drawer,
                (DrawerLayout) findViewById(R.id.drawer_layout));
    }

    @Override
    public void onNavigationDrawerItemSelected(int position) {
        // update the main content by replacing fragments
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
                .commit();
    }

    public void onSectionAttached(int number) {
        switch (number) {
            case 1:
                mTitle = getString(R.string.title_section1);
                break;
            case 2:
                mTitle = getString(R.string.title_section2);
                break;
            case 3:
                mTitle = getString(R.string.title_section3);
                break;
            case 4:
                mTitle = getString(R.string.title_section4);
                break;
            case 5:
                mTitle = getString(R.string.title_section5);
                break;
        }
    }

    public void restoreActionBar() {
        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setTitle(mTitle);
    }

    private class SlideMenuClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {
            // display view for selected nav drawer item
            //displayView(position);
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if (!mNavigationDrawerFragment.isDrawerOpen()) {
            // Only show items in the action bar relevant to this screen
            // if the drawer is not showing. Otherwise, let the drawer
            // decide what to show in the action bar.
            getMenuInflater().inflate(R.menu.main, menu);
            restoreActionBar();
            return true;
        }
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";

        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment() {
        }

        /* @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            return rootView;
        } */

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            ((MainActivity) activity).onSectionAttached(
                    getArguments().getInt(ARG_SECTION_NUMBER));
        }
    }

}

这是片段类:

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;

public class MasjidAlHaramFragment extends Fragment implements YouTubePlayer.OnInitializedListener {

    public String API_KEY = "xxxxxxxxxxxxxxxxxxxxx";

    //http://youtu.be/<VIDEO_ID>
    //final String VIDEO_ID = "4OoKpZWJASY";
    public String VIDEO_ID_2 = "VopbGPJVkzM";

    public MasjidAlHaramFragment () {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_masjidharam, container, false);

        //http://youtu.be/<VIDEO_ID>
        //final String VIDEO_ID = "4OoKpZWJASY";
        //final String VIDEO_ID_2 = "VopbGPJVkzM";

        /** Initializing YouTube player view **/
        YouTubePlayerView youTubePlayerView = null;
        if (youTubePlayerView != null)
            youTubePlayerView = (YouTubePlayerView) getView().findViewById(R.id.youtube_player);
        youTubePlayerView.initialize(API_KEY, this);

        return rootView;
    }

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            /** attaching layout xml **/
            //setContentView(R.layout.activity_main);

        }

    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult result) {
            //Toast.makeText(this,"Failured to Initialize!", Toast.LENGTH_LONG).show();
        }

        public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
            /** add listeners to YouTubePlayer instance **/
            player.setPlayerStateChangeListener(playerStateChangeListener);
            player.setPlaybackEventListener(playbackEventListener);

            /** Start buffering **/
            if (!wasRestored) {
                player.cueVideo(VIDEO_ID_2);
            }
        }

        YouTubePlayer.PlaybackEventListener playbackEventListener = new YouTubePlayer.PlaybackEventListener() {

            @Override
            public void onBuffering(boolean arg0) {
            }

            @Override
            public void onPaused() {
            }

            @Override
            public void onPlaying() {
            }

            @Override
            public void onSeekTo(int arg0) {
            }

            @Override
            public void onStopped() {
            }

        };

        YouTubePlayer.PlayerStateChangeListener playerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() {

            @Override
            public void onAdStarted() {
            }

            @Override
            public void onError(YouTubePlayer.ErrorReason arg0) {
            }

            @Override
            public void onLoaded(String arg0) {
            }

            @Override
            public void onLoading() {
            }

            @Override
            public void onVideoEnded() {
            }

            @Override
            public void onVideoStarted() {
            }
        };
}

这是XML视图

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

    <com.google.android.youtube.player.YouTubePlayerView
        android:id="@+id/youtube_player"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:padding="5dp" />

</RelativeLayout>

谢谢。

Ironmantis7x

扬克斯

您需要在片段的onCreateView方法中调用super.onCreateView(...)才能正确绘制片段。

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

另外,由于存在一些逻辑错误,我建议您执行以下操作:

View rootView = inflater.inflate(R.layout.fragment_masjidharam, container, false);

YouTubePlayerView youTubePlayerView = null;
// THIS IS ALWAYS FALSE. Comment it out or else it'll never get set.  
// if (youTubePlayerView != null)

youTubePlayerView = (YouTubePlayerView) rootView.findViewById(R.id.youtube_player);

// Check for not-null here.
if(youTubePlayerView != null) {
    youTubePlayerView.initialize(API_KEY, this);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

iOS8 UISplitViewController:如何在紧凑宽度窗口中切换到主视图?

来自分类Dev

iOS8 UISplitViewController:如何在紧凑宽度窗口中切换到主视图?

来自分类Dev

如何从主视图访问地图片段

来自分类Dev

将部分视图加载到AngularJS主视图中

来自分类Dev

保存模型后无法重新渲染主视图

来自分类Dev

Swiftui将命令连接到主视图中的值

来自分类Dev

主视图后加载局部视图

来自分类Dev

将OWA Mobile切换到桌面视图

来自分类Dev

复合视图模式:将错误消息从子视图传递到主视图

来自分类Dev

MVC ActionFilterAttribute,但仅在主视图上

来自分类Dev

SplitApp主视图按钮问题

来自分类Dev

UWP共享目标打开主视图

来自分类Dev

主视图占据了scrollview的顶部空间?

来自分类Dev

JavaScript如何选择主视图

来自分类Dev

需要回到主视图

来自分类Dev

TodayVewController的主视图向右移动

来自分类Dev

Segue替换UISplitViewController主视图

来自分类Dev

授权与未授权主视图

来自分类Dev

MVC部分视图无法在主视图中正确呈现

来自分类Dev

在Durandal.JS的主视图模型工作下无法获取多个视图模型

来自分类Dev

MVC局部视图无法在主视图中正确呈现

来自分类Dev

检测片段主视图的度量传递何时完成(或Android等效的viewDidLayoutSubviews)

来自分类Dev

如何将视图发送到背景,使其位于主视图后面?

来自分类Dev

如何将导航控制器添加到不是主视图的视图?

来自分类Dev

使用addContentView将新的子视图添加到我的主视图

来自分类Dev

切换到Outlook中的完整视图

来自分类Dev

在 Xamarin 中将列表视图切换到网格视图

来自分类Dev

Node JS + Express:在主视图中渲染子视图

来自分类Dev

单击时在主视图中加载部分视图

Related 相关文章

  1. 1

    iOS8 UISplitViewController:如何在紧凑宽度窗口中切换到主视图?

  2. 2

    iOS8 UISplitViewController:如何在紧凑宽度窗口中切换到主视图?

  3. 3

    如何从主视图访问地图片段

  4. 4

    将部分视图加载到AngularJS主视图中

  5. 5

    保存模型后无法重新渲染主视图

  6. 6

    Swiftui将命令连接到主视图中的值

  7. 7

    主视图后加载局部视图

  8. 8

    将OWA Mobile切换到桌面视图

  9. 9

    复合视图模式:将错误消息从子视图传递到主视图

  10. 10

    MVC ActionFilterAttribute,但仅在主视图上

  11. 11

    SplitApp主视图按钮问题

  12. 12

    UWP共享目标打开主视图

  13. 13

    主视图占据了scrollview的顶部空间?

  14. 14

    JavaScript如何选择主视图

  15. 15

    需要回到主视图

  16. 16

    TodayVewController的主视图向右移动

  17. 17

    Segue替换UISplitViewController主视图

  18. 18

    授权与未授权主视图

  19. 19

    MVC部分视图无法在主视图中正确呈现

  20. 20

    在Durandal.JS的主视图模型工作下无法获取多个视图模型

  21. 21

    MVC局部视图无法在主视图中正确呈现

  22. 22

    检测片段主视图的度量传递何时完成(或Android等效的viewDidLayoutSubviews)

  23. 23

    如何将视图发送到背景,使其位于主视图后面?

  24. 24

    如何将导航控制器添加到不是主视图的视图?

  25. 25

    使用addContentView将新的子视图添加到我的主视图

  26. 26

    切换到Outlook中的完整视图

  27. 27

    在 Xamarin 中将列表视图切换到网格视图

  28. 28

    Node JS + Express:在主视图中渲染子视图

  29. 29

    单击时在主视图中加载部分视图

热门标签

归档