相关疑难解决方法(0)

如何制作一个带有初始文本"Select One"的Android Spinner

在Android中,我想使用Spinner(当用户尚未进行选择时)显示文本"Select One".当用户单击微调器时,将显示项目列表,并且用户选择其中一个选项.用户进行选择后,所选项目将显示在微调器中,而不是"选择一个".

我有以下代码来创建一个Spinner:

String[] items = new String[] {"One", "Two", "Three"};
Spinner spinner = (Spinner) findViewById(R.id.mySpinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

使用此代码,最初显示项目"One".我可以在项目中添加一个新项目"Select One",但是"Select One"也会在下拉列表中显示为第一项,这不是我想要的.

我该如何解决这个问题?

android android-spinner

554
推荐指数
14
解决办法
52万
查看次数

如何隐藏Android Spinner中的一个项目

我正在寻找一种方法来隐藏Android微调框小部件中的一个项目.这将允许您模拟没有选择项目的微调器,并确保始终为所选的每个项目调用onItemSelected()回调(如果隐藏项目是"当前"项目).通常,微调器中总有一个项不会生成回调,即当前的回调.

stackoverflow上有一些关于如何禁用(灰显)项目的代码,而不是如何完全隐藏项目,就好像它们不存在一样.

经过多次实验,我想出了一个适用于各种新旧Android平台的黑客解决方案.它有一些小的化妆品缺点,很难注意到.我仍然希望听到一个更正式的解决方案,除了"不要用旋转器做那个".

这总是隐藏微调器中的第一个项目,但可以相当容易地扩展以隐藏任意项目或多个项目.在微调器项列表的开头添加一个包含空字符串的虚拟项.您可能希望在微调器对话框打开之前将当前微调器选择设置为项目0,这将模拟未选择的微调器.

使用ArrayAdapter方法的Spinner设置示例覆盖:

List<String> list = new ArrayList<String>();
list.add("");   //  Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");

// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {
        View v = null;

        // If this is the initial dummy entry, make it hidden
        if (position == 0) {
            TextView tv = new TextView(getContext());
            tv.setHeight(0);
            tv.setVisibility(View.GONE);
            v = tv; …
Run Code Online (Sandbox Code Playgroud)

android spinner

99
推荐指数
4
解决办法
5万
查看次数

如果选择了非零位置,则旋转后Spinner的onItemSelected回调调用两次

当我创建我的活动时,我设置了一个Spinner,为它分配一个监听器和一个初始值.我知道onItemSelected在应用程序初始化期间会自动调用回调.我觉得很奇怪的是,当设备旋转时会发生两次这种情况,这会导致我遇到一些问题,我不得不绕过它.如果微调器初始选择为零,则不会发生这种情况.我能够隔离问题,这是触发它的最简单的活动:

public class MainActivity extends Activity implements OnItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("Test","Activity onCreate");
    setContentView(R.layout.activity_main);
    ((Spinner)findViewById(R.id.spinner1)).setSelection(2);
    ((Spinner)findViewById(R.id.spinner1)).setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> spin, View selview, int pos, long selId)
{
    Log.i("Test","spin:"+spin+" sel:"+selview+" pos:"+pos+" selId:"+selId);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {}
}
Run Code Online (Sandbox Code Playgroud)

这是启动应用程序然后旋转设备时显示的logcat:

    I/Test( 9881): spin:android.widget.Spinner@4052f508 sel:android.widget.TextView@40530b08 pos:2 selId:2
    I/Test( 9881): Activity onCreate
    I/Test( 9881): spin:android.widget.Spinner@40535d80 sel:android.widget.TextView@40538758 pos:2 selId:2
    I/Test( 9881): spin:android.widget.Spinner@40535d80 sel:android.widget.TextView@40538758 pos:2 selId:2
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?我错过了什么吗?

android android-widget android-spinner

28
推荐指数
4
解决办法
1万
查看次数

Android:自定义微调器布局

我正在尝试制作一个完全自定义的微调器.我在按下它时弹出布局时遇到了困难.这是我的适配器的代码:

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.my_array, R.layout.spinnertext);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

根据我在文档中看到的内容,布局使用了由行设置的apears:

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Run Code Online (Sandbox Code Playgroud)

虽然每次我将其更改为我制作的新布局时,当我尝试使用微调器时,它会使应用程序失败.我试图寻找"android.R.simple_spinner_dropdown_item"的样子,以便弄清楚我是否可能遗漏任何东西.

我尝试过的所有布局都是线性或相对布局,只有textView.

如何在选择微调器时弹出自定义布局?

android android-layout

12
推荐指数
1
解决办法
4万
查看次数

对我的微调器的动作有一点问题

我想为我添加一些操作spinner(正如你在下面的代码中看到的,我添加了一些Toasts).

MainActivity.java:

public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener {

    String[] items = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
        spinner1.setOnItemSelectedListener(this);

        ArrayAdapter AA = new ArrayAdapter(this, android.R.layout.simple_spinner_item, items);

        AA.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner1.setAdapter(AA);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        String selectedItem = parent.getItemAtPosition(position).toString();
        if (selectedItem.equals("Item 1")) {
            Toast.makeText(getApplicationContext(), "Item 1", Toast.LENGTH_LONG).show();
        }

        String selectedItem2 = parent.getItemAtPosition(position).toString(); …
Run Code Online (Sandbox Code Playgroud)

java android spinner

7
推荐指数
1
解决办法
671
查看次数

如何将微调器中的第一个值(默认值)设置为空

如何将微调器中的第一个值(默认值)设置为空.意味着,直到用户从列表中选择值,微调器才会没有值.我在下面试过

list.add(""); 
Run Code Online (Sandbox Code Playgroud)

但是,它不会起作用.以下是我的代码:

if(values.contains("options")){
       spinner.setOnItemSelectedListener(MyClass.this);
       List<String> list = new ArrayList<String>();
       list.add("");
       list.add("Test");
       list.add("Working");
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, list) {};

      adapter.setDropDownViewResource(R.layout.custom_spinner_list);
      spinner.setAdapter(adapter);     
   }
 }
Run Code Online (Sandbox Code Playgroud)

android default-value android-spinner dropdown

1
推荐指数
1
解决办法
7557
查看次数