如何动态添加微调器(通过按下按钮)?
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]
我是 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]