当前位置: 首页 > 知识库问答 >
问题:

Android Spinner:在初始化期间避免onItemSelected调用

华景同
2023-03-14

我创建了一个带有微调器文本视图的Android应用程序。我想在 TextView 中显示微调器下拉列表中的选定项。我在 onCreate 方法中实现了微调器,因此当我运行该程序时,它会在 TextView 中显示一个值(在从下拉列表中选择一个项目之前)。

我只想在从下拉列表中选择一个项目后在TextView中显示该值。我该怎么做?

以下是我的代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class GPACal01Activity extends Activity implements OnItemSelectedListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Spinner spinner = (Spinner) findViewById(R.id.noOfSubjects);

        // Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.noofsubjects_array, android.R.layout.simple_spinner_item);
        // Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);
    }

    public void onItemSelected(AdapterView<?> parent, View arg1, int pos,long id) {
        TextView textView = (TextView) findViewById(R.id.textView1);
        String str = (String) parent.getItemAtPosition(pos);
        textView.setText(str);
    }

    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }
}

共有3个答案

红明德
2023-03-14

从API level 3开始,您可以对带有布尔值的活动使用onUserInteraction()来确定用户是否正在与设备交互。

http://developer . Android . com/reference/Android/app/activity . html # onUserInteraction()

@Override
public void onUserInteraction() {
     super.onUserInteraction();
     userIsInteracting = true;
}

作为活动的一部分,我有:

 private boolean userIsInteracting;

最后,我的微调器:

      mSpinnerView.setOnItemSelectedListener(new OnItemSelectedListener() {

           @Override
           public void onItemSelected(AdapterView<?> arg0, View view, int position, long arg3) {
                spinnerAdapter.setmPreviousSelectedIndex(position);
                if (userIsInteracting) {
                     updateGUI();
                }
           }

           @Override
           public void onNothingSelected(AdapterView<?> arg0) {

           }
      });

当你在活动中来来去去时,布尔值被重置为false。就像魅力一样。

卫阳炎
2023-03-14

只需在设置“OnItem所选列表”之前输入此行

spinner.setSelection(0,false)

这是因为setSelection(int,boolean)在内部调用setSelectionInt(),因此在添加侦听器时,项目已经被选中。

请注意,setSelection(int)无法工作,因为它在内部调用setNextSelectedPositionInt()

郑俊材
2023-03-14
spinner.setOnItemSelectedListener(this); // Will call onItemSelected() Listener.

所以第一次用任何整数值处理它

示例:最初取int check=0;

public void onItemSelected(AdapterView<?> parent, View arg1, int pos,long id) {
   if(++check > 1) {
      TextView textView = (TextView) findViewById(R.id.textView1);
      String str = (String) parent.getItemAtPosition(pos);
      textView.setText(str);
   }
}

你可以用布尔值来做,也可以通过检查当前和以前的位置来做。看这里

 类似资料:
  • 我正在开发我的第一个 Swing 应用程序,现在提出了一个难题:在静态初始化期间或开始实际执行后执行引导和资源初始化。我是什么意思...我有单例: 因此,方法如下所示 或者,也许我在启动后手动初始化资源,然后运行它。逻辑上正确的方式是什么?

  • 问题内容: 题 苹果的文档指定: 首次初始化属性时,不会调用willSet和didSet观察器。仅当在初始化上下文之外设置属性的值时才调用它们。 是否可以强制在初始化期间调用它们? 为什么? 假设我有这堂课 我创建了method ,以使处理调用更简洁,但我只想处理函数中的属性。有没有办法在初始化过程中强制此调用? 更新资料 我决定只为我的类删除便捷的初始化器,并强迫您在初始化后设置属性。这使我知道

  • 我正在尝试使用 我收到了这些错误信息,比如: 错误:应该在运行时初始化的类在映像构建过程中被初始化了:org.apache.log4j。在构建时(从命令行)请求初始化该类的级别。org.apache.log4j。在没有本机映像初始化仪表的情况下初始化了级别,并且无法跟踪堆栈跟踪。尝试避免初始化导致org.apache.log4j初始化的类。级别org.slf4j.log4j12。Log4jLogg

  • 我在做一个春靴项目。然后我尝试将mysql数据库连接到那个项目。我得到了名为“hikaripool-1-exception distry pool initialization”的错误。 这是整个StackTrace。

  • 每次我尝试启动java时。exe,在本例中为java。exe-版本,我得到以下输出: 下面是我的问题的截图: 我在Google上搜索了解决方案,但没有任何效果......

  • 我将JAX-WS标准的东西与生成客户端存根类。 live web服务位于不同的主机上,因此我需要在调用服务时提供url。到目前为止,我的方法是这样的(下面的类是从wsimport生成的): 第一:这是指定url的正确方法吗? 第二:似乎第1行中的构造函数实际上对新URL进行了网络调用!这会导致一个异常(由于未配置https),因此我永远无法进入下一行。 背景:我正在实现这个问题中概述的双向ssl