Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使所选项目不自动选择第一个条目_Java_Android_Eclipse_Spinner - Fatal编程技术网

Java 如何使所选项目不自动选择第一个条目

Java 如何使所选项目不自动选择第一个条目,java,android,eclipse,spinner,Java,Android,Eclipse,Spinner,我创建了一个微调器,当用户使用阵列适配器添加设备时,该微调器会自动更新设备名称。我使用微调器创建了一个MSelected方法,因此当微调器中的一个名称被选中时,会出现一个新窗口。但是,当活动开始时,OnItemSelected会自动选择列表中的第一项,因此在新窗口出现之前,用户没有机会实际进行选择 代码如下: public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3)

我创建了一个微调器,当用户使用阵列适配器添加设备时,该微调器会自动更新设备名称。我使用微调器创建了一个MSelected方法,因此当微调器中的一个名称被选中时,会出现一个新窗口。但是,当活动开始时,OnItemSelected会自动选择列表中的第一项,因此在新窗口出现之前,用户没有机会实际进行选择

代码如下:

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    // TODO Auto-generated method stub
    startActivity(new Intent("com.lukeorpin.theappliancekeeper.APPLIANCESELECTED"));
    }

public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
public void已选中(适配器视图arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
startActivity(新意图(“com.lukeorpin.theapplicationkeeper.APPLIANCESELECTED”);
}
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
有人知道列表中的第一项不会被自动选择的方式吗

以下是微调器其余部分的代码:

ArrayAdapter<String> appliancenameadapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, ApplianceNames); //Sets up an array adapter containing the values of the ApplianceNames string array
    applianceName = (Spinner) findViewById(R.id.spinner_name); //Gives the spinner in the xml layout a variable name
    applianceName.setAdapter(appliancenameadapter); //Adds the contents of the array adapter into the spinner

    applianceName.setOnItemSelectedListener(this);
ArrayAdapter appliancenameadapter=新的ArrayAdapter(此,
android.R.layout.simple_spinner_item,ApplianceNames);//设置包含ApplianceNames字符串数组值的数组适配器
applianceName=(微调器)findViewById(R.id.Spinner_name);//为xml布局中的微调器提供变量名
setAdapter(appliancenameadapter);//将数组适配器的内容添加到微调器中
applianceName.setOnItemSelectedListener(此);
有人知道列表中的第一项不会被自动选择的方式吗

微调器上始终有一个选择,您无法更改该选择

恕我直言,您不应该使用
微调器来触发启动活动


也就是说,您可以使用
布尔值来跟踪这是否是第一个选择事件,如果是,则忽略它。

如果您试图避免最初调用侦听器的
onItemSelected()
方法,另一个选项是使用
post()
以利用视图的消息队列。微调器第一次检查侦听器时,它还不会被设置

// Set initial selection
spinner.setSelection(position);

// Post to avoid initial invocation
spinner.post(new Runnable() {
  @Override public void run() {
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        // Only called when the user changes the selection
      }

      @Override
      public void onNothingSelected(AdapterView<?> parent) {
      }
    });
  }
});
//设置初始选择
微调器。设置选择(位置);
//Post以避免初始调用
spinner.post(新的Runnable(){
@重写公共无效运行(){
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
//仅在用户更改选择时调用
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
}
});
这对我很有效

private boolean isSpinnerInitial=true;

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

        if(isSpinnerInitial)
        {
            isSpinnerInitial = false;
        }
        else  {
            // do your work...
        }

    }
@覆盖
已选择公共视图(AdapterView父视图、视图、,
内部位置,长id){
如果(初始值)
{
isSpinnerInitial=false;
}
否则{
//做你的工作。。。
}
}

声明变量IsSpinneInitial 然后选择一个选项作为默认选项

spinnertaggeview.setSelection(-1);不会像在.Net或其他语言中那样将选择设置为-1或所有未选择的内容。 所以你可以忽略这句话

testStringArrayListinside.add("Make a Selection");
ADD this line so that this is selected by default and user never selects it 

testStringArrayList = (ArrayList<String>) ClinqLinX.get("Tag");
                boolean added = false;
             testStringArrayListinside.add("Make a Selection");
                for (String s : testStringArrayList) {
                    if (s != null || s != "") {
                        String[] results = s.split(","); // split on commas

                        for (String string : results) {

                            testStringArrayListinside.add(string);
                            Toast.makeText(getContext(), string, Toast.LENGTH_SHORT).show();
                            added = true;
                        }
                    }

                }
                if (added == false) {
                    testStringArrayListinside.add("Not tagged details found");
                }

                spinnertaggeview.refreshDrawableState();

            }

            // Adapter: You need three parameters 'the context, id of the layout (it will be where the data is shown),
            // and the array that contains the data
            if (testStringArrayListinside.size() > 0) {
                adapter = new ArrayAdapter<String>(this.getContext(),android.R.layout.select_dialog_singlechoice, testStringArrayListinside);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                // Here, you set the data in your ListView
                spinnertaggeview.setAdapter(adapter);
                 isSpinnerInitial = true;

                spinnertaggeview.setSelection(-1);
                spinnertaggeview.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

                    @Override
                    public void onItemSelected(AdapterView<?> arg0, View arg1,
                                               int arg2, long arg3) {
                        if (isSpinnerInitial){

                            isSpinnerInitial = false;

                            return;}
                        else{
                        TextView tv = (TextView) arg1;
                        String spinner_value = tv.getText().toString();
                        if (spinner_value.length() == 0) {
                            spinner_value = "Nothing";
                        }
                        String strusername = spinner_value;//As you are using Default String Adapter
                        Toast.makeText(getContext(), strusername, Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(spinnertaggeview.getContext(), Userdetails.class);
                        intent.putExtra("Username", strusername);
                        spinnertaggeview.getContext().startActivity(intent);}

                    }
testStringArrayListinside.add(“进行选择”);
添加此行,使其在默认情况下处于选中状态,并且用户从不选择它
testStringArrayList=(ArrayList)ClinqLinX.get(“标记”);
布尔加法=假;
testStringArrayListinside.add(“进行选择”);
for(字符串s:testStringArrayList){
如果(s!=null | | s!=“”){
String[]results=s.split(“,”;//以逗号分隔
for(字符串:结果){
testStringArrayListinside.add(字符串);
Toast.makeText(getContext(),string,Toast.LENGTH_SHORT).show();
添加=真;
}
}
}
if(added==false){
testStringArrayListinside.add(“未找到标记的详细信息”);
}
SpinnerTagView.refreshDrawableState();
}
//适配器:您需要三个参数:上下文、布局id(数据显示的位置),
//以及包含数据的数组
如果(testStringArrayListinside.size()>0){
adapter=new ArrayAdapter(this.getContext(),android.R.layout.select\u dialog\u singlechoice,teststringarraylistinide);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
//在这里,您可以在ListView中设置数据
喷丝头TaggeView.setAdapter(适配器);
IsSpinnerinital=真;
喷丝头TaggeView.setSelection(-1);
SpinnerTagView.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener()){
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
如果(初始值){
isSpinnerInitial=false;
返回;}
否则{
TextView电视=(TextView)arg1;
字符串微调器_value=tv.getText().toString();
如果(微调器值.length()=0){
微调器_value=“无”;
}
String strusername=spinner_value;//使用默认字符串适配器时
Toast.makeText(getContext(),strusername,Toast.LENGTH_SHORT).show();
意向意向=新意向(喷丝头)