2014-01-17 99 views
3

我试图微调使用下面的代码动态添加到我的应用程序:一个按钮,点击添加微调动态Android中

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    startTime = (EditText)findViewById(R.id.EditTextST); 
    startDate = (EditText)findViewById(R.id.editTextSD); 

    LinearLayout linearlayout = new LinearLayout(this); 
    //RelativeLayout linearlayout = (RelativeLayout)findViewById(R.id.main_layout); 

    ArrayList<String> spinnerArray = new ArrayList<String>(); 
    spinnerArray.add("one"); 
    spinnerArray.add("two"); 
    spinnerArray.add("three"); 
    spinnerArray.add("four"); 
    spinnerArray.add("five"); 

    Spinner spinner = new Spinner(this); 
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, spinnerArray); 
    spinner.setAdapter(spinnerArrayAdapter); 

    linearlayout.addView(spinner); 

    setContentView(linearlayout); 
} 

这增加了微调,但在我的XML与替换我的一切动态创建的微调器。 我想通过单击按钮将布局添加到布局中(我使用XML创建的布局),而不是替换布局。请帮忙。

编辑:这是我的XML文件

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<RelativeLayout 
    android:id="@+id/main_layout" 
    android:layout_width="match_parent" 
    android:layout_height="900dp" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="@string/select_week" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <CheckBox 
     android:id="@+id/checkBox1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/textView1" 
     android:text="@string/sun" /> 

    <CheckBox 
     android:id="@+id/checkBox2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/checkBox1" 
     android:layout_alignBottom="@+id/checkBox1" 
     android:layout_toRightOf="@+id/checkBox1" 
     android:text="@string/mon" /> 

    <CheckBox 
     android:id="@+id/checkBox3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/checkBox2" 
     android:layout_toRightOf="@+id/checkBox2" 
     android:text="@string/tue" /> 

    <CheckBox 
     android:id="@+id/checkBox4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/checkBox3" 
     android:layout_alignBottom="@+id/checkBox3" 
     android:layout_toRightOf="@+id/checkBox3" 
     android:text="@string/wed" /> 

    <CheckBox 
     android:id="@+id/checkBox5" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/checkBox1" 
     android:layout_toLeftOf="@+id/checkBox2" 
     android:text="@string/thu" /> 

    <CheckBox 
     android:id="@+id/checkBox6" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/checkBox2" 
     android:layout_below="@+id/checkBox2" 
     android:text="@string/fri" /> 

    <CheckBox 
     android:id="@+id/checkBox7" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/checkBox2" 
     android:layout_toRightOf="@+id/checkBox2" 
     android:text="@string/sat" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/checkBox5" 
     android:layout_marginTop="18dp" 
     android:text="@string/select_week_number" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <CheckBox 
     android:id="@+id/CheckBox01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/checkBox02" 
     android:layout_alignBottom="@+id/checkBox02" 
     android:layout_alignLeft="@+id/checkBox5" 
     android:text="@string/one" /> 

    <CheckBox 
     android:id="@+id/CheckBox03" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/checkBox02" 
     android:layout_alignBottom="@+id/checkBox02" 
     android:layout_toRightOf="@+id/checkBox6" 
     android:text="@string/three" /> 

    <CheckBox 
     android:id="@+id/checkBox02" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView2" 
     android:layout_toRightOf="@+id/checkBox5" 
     android:text="@string/two" /> 

    <CheckBox 
     android:id="@+id/CheckBox04" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/CheckBox03" 
     android:layout_alignBottom="@+id/CheckBox03" 
     android:layout_toRightOf="@+id/textView2" 
     android:text="@string/four" /> 

    <TextView 
     android:id="@+id/TextView01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/CheckBox01" 
     android:layout_marginTop="16dp" 
     android:text="@string/select_start_date" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <EditText 
     android:id="@+id/editTextSD" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/CheckBox01" 
     android:layout_below="@+id/TextView01" 
     android:layout_toLeftOf="@+id/CheckBox04" 
     android:ems="10" 
     android:inputType="text|date" 
     android:onClick="showDatePickerDialog" > 

     <requestFocus /> 
    </EditText> 

    <EditText 
     android:id="@+id/EditTextST" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/editTextSD" 
     android:layout_alignBottom="@+id/editTextSD" 
     android:layout_alignLeft="@+id/CheckBox04" 
     android:ems="10" 
     android:inputType="time" 
     android:onClick="showTimePickerDialog" /> 

    <TextView 
     android:id="@+id/TextView02" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/editTextSD" 
     android:layout_below="@+id/editTextSD" 
     android:layout_marginTop="17dp" 
     android:text="@string/select_end_date" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <EditText 
     android:id="@+id/EditText01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/TextView02" 
     android:layout_alignRight="@+id/editTextSD" 
     android:layout_below="@+id/TextView02" 
     android:ems="10" 
     android:inputType="text|date" 
     android:onClick="showDatePickerDialog" /> 

    <EditText 
     android:id="@+id/EditText02" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/EditText01" 
     android:layout_alignBottom="@+id/EditText01" 
     android:layout_alignLeft="@+id/EditTextST" 
     android:ems="10" 
     android:inputType="time" 
     android:onClick="showTimePickerDialog" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/EditText01" 
     android:layout_below="@+id/EditText01" 
     android:layout_marginTop="17dp" 
     android:text="@string/reminder" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <Spinner 
     android:id="@+id/spinner1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/textView3" 
     android:entries="@array/reminder_times" 
     android:paddingLeft="-10dp" 
     android:gravity="left" 
     tools:listitem="@android:layout/activity_list_item" /> 

    <Button 
     android:id="@+id/button1" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/textView3" 
     android:layout_below="@+id/spinner1" 
     android:layout_marginTop="119dp" 
     android:text="@string/add_reminder" /> 



</RelativeLayout> 

</ScrollView> 
+0

你有尝试过吗? – Riser

+0

您正在将contentView设置为您创建的线性布局,因此进行替换,使用findViewById获取视图(相对或线性),然后向其添加微调器,或者将您创建的线性布局添加到该布局。 –

回答

4

这是你做了什么

  1. 增加了一个新的LinearLayout。
  2. 向上述布局添加了微调器。
  3. 然后您设置内容视图。

这是我认为会起作用的。

  1. 您使用findViewById(R.id.root_layout)获得根布局。
  2. 现在创建一个spinner.Add items到它,就像你在代码中正确地完成了一样。
  3. 现在将微调器添加到您的root_layout

你的错误

你犯了一个新的布局,并将其设置为主要内容,你永远不把它添加到root_layout。

调试

如果你想看看有什么布局层次布局has.Open DDMS查看和点击位于摄像机附近的层次结构浏览器选项there.Its option.Click,并得到了屏幕和你将会看到你的布局层次结构,它将显示一个包含微调器的linearLayout。

这里有一个代码来演示它。

package com.example.testproject; 

import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Spinner;

公共类MainActivity扩展活动{

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    /** 
    * This is what you have done!!! 
    */ 
    LinearLayout layout=new LinearLayout(this); 
    String[] strings={"1","2","3"}; 
    Spinner spinner=new Spinner(this); 
    spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item,strings)); 

    layout.addView(spinner); 
    /** 
    * Comment this line when you use the below mentioned solution. 
    */ 
    setContentView(layout); 

    /** 
    * This is what you should have done. 
    */ 

    RelativeLayout root_layout=(RelativeLayout)findViewById(R.id.root_layout); 
    root_layout.addView(spinner); 

} 

}

希望它可以帮助你。

+0

它将微调器添加到布局的顶部。如何在我的XML的“button1”按钮之前添加微调器? – Gantavya

+0

使用您的容器布局作为RelativeLayout并将下列属性设置为微调器:android:layout_alignLeft =“@ + id/your_button” – cafebabe1991

+0

我在问动态创建的微调器。当我添加代码'android:layout_alignLeft =“@ + id/button1;',我得到错误'layout_alignleft无法解析为一个变量'。 – Gantavya

0

请看看你的代码

setContentView(R.layout.activity_main); 

但后来

setContentView(linearlayout); 

认真处理所有这些事情

请有以下

final LinearLayout lm = (LinearLayout) findViewById(R.id.linearMain); 

代替 LinearLayout linearlayout = new LinearLayout(this);

1

错误在你的主XML布局和使用一个单独的线性布局:你创建新的线性布局(其剂量不包含任何视图)中并加入微调到它然后使用仅包含微调器的布局重新设置了activity_main布局。

简单的方法是使微调隐形最初并使其可见按钮被点击

时,所以在XML声明微调微调知名度=“水涨船高”

    <Spinner 
        android:id="@+id/my_spin" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:visibility="gone" 
        /> 

在OnCreate中

spinner = (Spinner) findViewById(R.id.my_spin); 

现在让微调器可见点击按钮

timer_spin.setVisibility(View.VISIBLE); 

注意

GONE:这种观点是不可见的,并且它不采取任何空间布局的目的。

无形:这种观点是无形的,但它仍然占用空间布局的目的

可见:这种观点是可见的。

1

您能否发布您的activity_main.xml文件位于您项目的res/layout/文件夹中。

在任何情况下,您应该将您的微调器添加到您的main_layout,而不是一些新的linearlayout没有连接到任何东西。

及以下的解决方案应该是什么样子 (虽然,这将只取决于什么实际写在你的activity_main.xml档案工作):

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

    startTime = (EditText)findViewById(R.id.EditTextST); 
    startDate = (EditText)findViewById(R.id.editTextSD); 

    // The line below assumes that the layout called main_layout 
    // found in the res/layout/activity_main.xml is a LinearLayout 
    LinearLayout mainLayout = (LinearLayout)findViewById(R.id.main_layout); 

    ArrayList<String> spinnerArray = new ArrayList<String>(); 
    spinnerArray.add("one"); 
    spinnerArray.add("two"); 
    spinnerArray.add("three"); 
    spinnerArray.add("four"); 
    spinnerArray.add("five"); 

    Spinner spinner = new Spinner(this); 
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, spinnerArray); 
    spinner.setAdapter(spinnerArrayAdapter); 

    mainLayout.addView(spinner); 
} 

后您纠正这个错误,我建议你学习一点Java,并在三或四周内每天进行至少二十分钟的Java练习。一旦你了解了更多的Java,你就可以很容易地纠正这些错误。

+0

它的作品,但新的微调是添加到布局的顶部。我怎样才能将它添加到布局的底部。我将编辑我的文章以包含我的XML文件。 – Gantavya

相关问题