如何动态添加微调器(按下按钮)?

时间:2015-02-21 14:22:11

标签: java android spinner

我是Android编程的新手,我一直在尝试添加一个按钮点击的微调器,我的奇迹是我总是不断收到错误,我无法在任何地方找到可靠的答案,有人可以帮助我吗? 下面是我的代码 它告诉我无法创建inSpinner,并且无法应用CreateFromResource()数组适配器。

.Java文件

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


    add = (Button) findViewById(R.id.b_Add);

add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

    LinearLayout newLinear = new LinearLayout();


    Spinner newSpinner = new Spinner(this);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.question_type_array, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource
            (android.R.layout.simple_spinner_dropdown_item);
    newSpinner.setAdapter(adapter);
    newSpinner.setOnItemSelectedListener(new CustomOnItemSelectedListener());

    newLinear.addView(newSpinner);


    setContentView(newLinear);


    RelativeLayout root_layout=(RelativeLayout)findViewById(R.id.root_layout);
    root_layout.addView(newSpinner);
}

2 个答案:

答案 0 :(得分:2)

您可以直接在根布局中添加微调器,在您的情况下为 RelativeLayout 。我已经解决了你的问题。我在这里分享布局设计 Java代码屏幕截图。如果我能帮助您,请发表评论。

布局文件 - &gt;

<?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"
    android:id="@+id/root_layout">

      <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_margin="@dimen/medium"
        android:text="Add a Spinner"
        android:onClick="add"/>

</RelativeLayout>

strings.xml文件 - &gt;

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

<string name="app_name">Hoster</string>
<string name="title_activity_main">Main</string>
<array name="spinner">
    <item> Airtel </item>
    <item> Vodafone </item>
    <item> Reliance </item>
    <item> Aircel </item>
    <item> BSNL </item>
</array>

Java代码 - &gt;

private RelativeLayout root;
private Spinner spinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.experimental);
    root = (RelativeLayout)findViewById(R.id.root_layout);
}

public void add(View v){
    spinner = new Spinner(this);
    ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter.createFromResource(this,R.array.spinner,android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(spinnerAdapter);
    spinner.setLayoutParams(new ActionBar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    root.addView(spinner);
}![Added on Button Click][1]

答案 1 :(得分:1)

您需要知道OnClickListener类中的这个指示它不是Activity类。并且您需要将活动的上下文传递给(Spinner,LinearLayout,...)构造函数,以便获取您使用NameOfTheActivityClass.this的活动的上下文,而不是直接使用它。

我不知道你的逻辑,但我需要提一下,你可以将微调器添加到活动的主要布局中,而不是从头开始新的布局和setContentView()再次膨胀。

btnAdd.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        LinearLayout newLinear = new LinearLayout(AddSpinnerDynamicallyActivity.this);


        Spinner newSpinner = new Spinner(AddSpinnerDynamicallyActivity.this);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                AddSpinnerDynamicallyActivity.this, R.array.question_type_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource
                (android.R.layout.simple_spinner_dropdown_item);
        newSpinner.setAdapter(adapter);


        newLinear.addView(newSpinner);


        setContentView(newLinear);
    }});