Android 在视图中添加视图

Android 在视图中添加视图,android,view,android-framelayout,Android,View,Android Framelayout,我正在尝试制作一个音乐播放器,我被这个问题困扰了大约一天 所以我正在做的是,我正在遵循一个教程。我们使用一个名为MediaController的类来控制媒体(如播放/暂停、进度条等) 现在我正在做的是尝试自己做同样的事情。也就是说,我是 我正在向一个类发送一个视图(在本例中为列表视图),该类将以编程方式 在这个视图中添加一个框架布局(这是我在android源代码中看到的) 框架布局使用以前制作的称为媒体控制器的xml 下面是一些代码 public void anchorToView(View v

我正在尝试制作一个音乐播放器,我被这个问题困扰了大约一天

所以我正在做的是,我正在遵循一个教程。我们使用一个名为MediaController的类来控制媒体(如播放/暂停、进度条等)

现在我正在做的是尝试自己做同样的事情。也就是说,我是

  • 我正在向一个类发送一个视图(在本例中为列表视图),该类将以编程方式
  • 在这个视图中添加一个框架布局(这是我在android源代码中看到的)
  • 框架布局使用以前制作的称为媒体控制器的xml
  • 下面是一些代码

    public void anchorToView(View view){
        mainView = view;
        view.addOnLayoutChangeListener(layoutChangeListener);
    
         frameParams = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        );
    
        removeAllViews();
        View v = makeControllerView();
    }
    
    private OnLayoutChangeListener layoutChangeListener = new OnLayoutChangeListener() {
    
        @Override
        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight,
                int oldBottom) {
        }
    };
    
    private View vDemo;
    private ImageButton pauseButton;
    
    public View makeControllerView(){
        LayoutInflater inflater=  (LayoutInflater) context.getSystemService
                (Context.LAYOUT_INFLATER_SERVICE);
        vDemo = inflater.inflate(R.layout.media_controller, null);
    
        pauseButton = (ImageButton) vDemo.findViewById(R.id.pause);
    
        return vDemo;
    }
    

    您可以创建控制器视图,但在调用removeAllViews()后从不将其添加到父视图。您需要这样做:

    mainView.addView(v); // V being your controller view returned from makeControllerView()
    

    那么问题出在哪里呢?没有显示任何额外的内容(我指的是我制作的其他列表视图)。我尝试过,实际上没有视图添加视图的方法。尽管我仍在寻找更好的答案。但我从Devsil的回答中得到了线索。即使用视图组。addView方法仅适用于viewgroup类。因此使用该方法。但仍在等待更好的答案。如果您知道主视图是哪种类型的视图组(如果是),则可以将该视图强制转换为相应的视图。像这样((Linearlayout)mainView.addView(v);但我会从不同的活动中,以不同的观点使用这种方法。因此,view group.well强制转换到视图组并添加视图将有效,LinearLayout、RelativeLayout、FrameLayout等都从视图组扩展。