问题:我有两个旋转器,它们的数值不同。然而,当在模拟器或应用程序中观察它们时,它们在屏幕上显示的项目之间都有不同的 "间隙"。当我试图将数值从我的活动中发送到另一个活动时,我总是得到错误的数值给旋转器1。
字符串数组
<string-array name="lage">
<item>--Välj läge--</item>
<item>Kök</item>
<item>Badrum</item>
<item>Hall</item>
<item>Garderob</item>
<item>Balkong</item>
<item>Sovrum</item>
<item>Vardagsrum</item>
<item>Förråd</item>
<item>Allmäna utrymmen</item>
<item>Övrigt</item>
</string-array>
<string-array name="Fel">
<item>--Välj läge--</item>
<item>Vattenläcka</item>
<item>Ventilation</item>
<item>Fönster</item>
<item>Avlopp</item>
<item>Elfel</item>
<item>Vitvaror</item>
<item>Golv</item>
<item>Vägg</item>
<item>Övrigt</item>
</string-array>
实现简单的下拉项目的微调器适配器。
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.lage,android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter);
spinner1.setOnItemSelectedListener(this);
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this,R.array.Fel,android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(adapter2);
spinner2.setOnItemSelectedListener(this);
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
input1 = spinner1.getItemAtPosition(position).toString();
input2 = spinner2.getItemAtPosition(position).toString();
}
按钮将数值传递给下一个活动
buttonNasta.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getBaseContext(), step2Fel.class);
intent.putExtra("testX", input1);
intent.putExtra("testY",input2);
startActivity(intent);
}
});
输入1和2是全局的 "私有静态String "值。
Layout.xml。
<LinearLayout
android:id="@+id/xxx"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="7"
android:orientation="vertical"
android:background="@android:color/white">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Located?"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:textSize="18sp" />
<Spinner
android:id="@+id/lage_spinner"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:background="@drawable/sqare_frame" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Problem?"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:textSize="18sp" />
<Spinner
android:id="@+id/small_spinner"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:background="@drawable/sqare_frame" />
</LinearLayout>
setOnItemSelectedListener
问题似乎是你使用了一个单一的实现来设置全局变量,这意味着每当选择任何一个列表中的项目时,它们都会被相同的值覆盖。
如果你使用两个独立的实现,每个实现只更新相应的变量,就我所知,它应该可以工作。
例如,你可以使用一个新的 AdapterView.OnItemSelectedListener
在每次调用 setOnItemSelectedListener
,就像你用 setOnClickListener
.
其中一种方式可能如下(只是一个草图,我非常喜欢教人们如何钓鱼,而不是给他们鱼:)。):
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this,
R.array.lage,
android.R.layout.simple_spinner_item
);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter);
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public onItemSelected(...) {...}
@Override
public onNothingSelected(...) {...}
});
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
this,
R.array.Fel,
android.R.layout.simple_spinner_item
);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(adapter2);
spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public onItemSelected(...) {...}
@Override
public onNothingSelected(...) {...}
});
另一种方法是,在你目前的 onItemSelected
的实现,因此哪个全局变量应该被更新,可能会用类似于 parent == spinner1
,虽然我没有检查这个片段。
我想我现在知道是什么了,在。
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
this,
R.array.Fel,
android.R.layout.simple_spinner_item
);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(adapter2);
召唤... setDropDownViewResource
应是 adapter2
,不 adapter
. 这是一个很常见也很容易犯的错误,我用下面的方法来避免自己犯这样的错误。
{
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
this,
R.array.Fel,
android.R.layout.simple_spinner_item
);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(adapter2);
}
这样一来,局部变量 adapter2
只在其相关的范围内可用。如果您将相同的块用于等同于 adapter
的时候,编译器会抱怨说不小心使用了 adapter
当 adapter2
应使用。