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

How Can I Add A Spinner Dynamically(By Press Of A Button)?

我是 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);
}

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

我不知道你的逻辑,但我需要提一下,你可以将微调器添加到 activity 的主布局中,而不是从头开始扩充新布局,然后再次 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);
    }});

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

布局文件 -->

<?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 文件 -->

<?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代码-->

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]