我正在使用一个动态填充适配器的下拉列表。
- 当有多个选项时,下拉列表的行为是标准的。单击后,下拉列表会显示,用户可以选择一个选项。
- 当只有一个选项时,我想防止下拉列表出现,并捕获单击事件执行某个操作。
我找不到阻止默认行为(即在单击时为仅一个选项显示下拉列表)的解决方案。你对如何做到这一点有什么想法吗? 谢谢
我找不到阻止默认行为(即在单击时为仅一个选项显示下拉列表)的解决方案。你对如何做到这一点有什么想法吗? 谢谢
嗯... 如果 spinner
中只有一个项目,尝试使用 setClickable(false)
或 setEnabled(false)
。
试试这个:
public class SpinnerActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.spinner1);
List<String> list = new ArrayList<String>();
list.add("list 1");
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);
if (list.size() < 2) {
spinner.setClickable(false);
spinner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
Toast.makeText(SpinnerActivity.this, "Catch it!", Toast.LENGTH_SHORT).show();
}
return true;
}
});
}
}
}
spinner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return true;
}
});
在 Kotlin 中,我是这样做的
<string-array name="coins_array">
<item>USD</item>
<item>USDT</item>
</string-array>
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.main_activity.*
class MainActivity: AppCompatActivity(), AdapterView.OnItemSelectedListener{
private var touchEvent = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
ArrayAdapter.createFromResource(this, R.array.coins_array, android.R.layout.simple_spinner_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
coin_choice.adapter = adapter
}
coin_choice.onItemSelectedListener = this
}
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
if(touchEvent){
val coin: String = parent.getItemAtPosition(position).toString()
Toast.makeText(this, coin, Toast.LENGTH_SHORT).show()
}
touchEvent = true
}
override fun onNothingSelected(parent: AdapterView<*>?) {
}
}