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