2016-11-27 40 views
1

我正在我的第一个Android应用程序,并遇到了一些麻烦。我试图开始一个新的活动,它接收来自上一个活动的ArrayList,并为列表中的每个项目创建一个按钮。我试着看过很多其他堆栈溢出帖子,但他们都没有帮助解决我的问题。Android应用程序动态创建按钮出现在同一个地方

我已经尝试了许多不同的策略,我的代码如下目前:

public class VideoMenu extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_video_menu); 
    Bundle b = getIntent().getExtras(); 

    ArrayList<String> videos = b.getStringArrayList("videos"); 

    setContentView(R.layout.activity_video_menu); 

    for(int i=0;i<videos.size();i++){ 
     Button myButton = new Button(this); 
     myButton.setText(videos.get(i)); 
     myButton.setId(i); 

     RelativeLayout ll = (RelativeLayout)findViewById(R.id.videos); 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     if (i != 0) { 
      lp.addRule(RelativeLayout.END_OF, i - 1); 
     } 
     myButton.setLayoutParams(lp); 

     ll.addView(myButton,lp); 
    } 

} 

}

和XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/videos" 
android:layout_alignParentBottom="true" 
android:layout_alignWithParentIfMissing="true" 
android:layout_alignParentLeft="true" 
android:layout_alignParentTop="true" 
android:orientation="vertical"> 

这编译就好了,但所有的按钮都显示在另一个上面。如果你可以包括为什么任何代码建议可能工作的原因,我将不胜感激。我想详细了解此:)

编辑:固定错字

+0

你可以在android中使用ListView解决你的问题,你可以在google上找到很多教程,例如http://www.vogella.com/tutorials/AndroidListView/article.html。它可以轻松处理滚动和onClick事件。 – Swapnil

回答

0

的原因是,您要添加的按钮,一个RelativeLayoutRelativeLayout基本上将所有视图添加到视图中指定的任何位置。你并没有真正指定,所以它们都出现在彼此之上。

为了解决这个问题,改变你的RelativeLayoutLinearLayout,无论使用哪种horizontalverticalorientationhorizontal将在水平线上并排添加视图,并且vertical将以垂直线添加它们。

+0

这工作,并非常感谢你的解释。我使用了一个垂直的LinearLayout并将其嵌入到ScrollView中。谢谢! – William

相关问题