我正在使用一个微调器,其适配器是动态填充的。
- 当有多个项目时,微调器行为是标准的。单击时,将显示下拉菜单,允许用户选择一个项目
- 当只有一个项目时,我想阻止下拉菜单出现并捕获单击事件以执行操作。
我找不到阻止默认行为的解决方案(即单击时仅显示一个项目的下拉列表)。关于如何做到这一点的任何想法?谢谢
我正在使用一个微调器,其适配器是动态填充的。
我找不到阻止默认行为的解决方案(即单击时仅显示一个项目的下拉列表)。关于如何做到这一点的任何想法?谢谢
嗯...尝试使用setClickable(fasle)
或者setEnabled(false)
如果只有一项在spinner
.
试试这个
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;
}
});
}
}
}
为了防止微调器显示下拉列表,我只在 onTouch(...) 中返回 true,如下所示:
spinner.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return true;
}
});
在科特林我是这样做的
<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<*>?) {
}
}