2015-02-05 46 views
0

我搜索了一个解决方案,以避免在动态创建的微调器上自动选择。我发现链接:Spinner onItemSelected() executes when it is not suppose toOn Spinner init - >自动选择避免

但我不能让它在我的代码工作:

private void populateSpinner() { 
     //Spinner spinnerKostenstellen; 
     //spinnerKostenstellen = (Spinner) findViewById(R.id.spinner2); 
     //spinnerKostenstellen = (Spinner) SpinnerLayout.findViewById(R.id.spinner2); 

     AlertDialog.Builder adb2 = new AlertDialog.Builder(this); 
     LayoutInflater adbInflater2 = LayoutInflater.from(this); 
     View SpinnerLayout = adbInflater2.inflate(R.layout.spinner, null); 
     adb2.setView(SpinnerLayout); 
     adb2.setTitle("Kostenstelle auswählen:"); 
     spinnerKostenstellen = (Spinner) SpinnerLayout.findViewById(R.id.spinner2); 
     spinnerKostenstellen.setSelection(1, false); 
     spinnerKostenstellen.setOnItemSelectedListener(this); 
     //spinnerKostenstellen.setCallbackDuringFling(false); 
     List<String> lables = new ArrayList<String>(); 

     for (int i = 0; i < kostenstellenList.size(); i++) { 
      lables.add(kostenstellenList.get(i).getKst()); 
     } 

     // Creating adapter for spinner 
     //ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item); 

     //ArrayAdapter<String> kostenstellenList = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item); 
     ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, lables); 
     // Drop down layout style - list view with radio button 
     spinnerAdapter 
       .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     // attaching data adapter to spinner 
     spinnerKostenstellen.setAdapter(spinnerAdapter); 
     adb2.show(); 
    } 

回答

0

(编辑)下面的代码隐藏第一空白值从旋转

List<String> urlist = new ArrayList<String>(); 
urlist.add(""); // Initial dummy entry 
urlist.add("yourstring1"); 
urlist.add("yourstring2"); 
urlist.add("yorustring3"); 


ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, urlist) { 
    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) 
    { 
     View v = null; 

     // If this is the initial blnk entry, make it hidden 
     if (position == 0) { 
      TextView tv = new TextView(getContext()); 
      tv.setHeight(0); 
      tv.setVisibility(View.GONE); 
      v = tv; 
     } 
     else { 
      // Pass convertView as null to prevent reuse of special case views 
      v = super.getDropDownView(position, null, parent); 
     } 

     return v; 
    } 
}; 

dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
mySpinner.setAdapter(dataAdapter); 
+1

在类型AbsSpinner的方法为setSelection(INT)是不适用的参数(字符串) – hevilp 2015-02-05 17:00:36

+0

当你拿到项目的数组列表然后插入一个空白项目在你自己的任何位置和setSelection(yourCustomaddedposition)。 – Shadik 2015-02-05 17:08:18

+0

而在适配器中,您可以将if((item!= null)&&(position == yourcustomaddedposition))的条件放入row.setVisibility(View.GONE);其他{ } } – Shadik 2015-02-05 17:09:19

0

显示对话框后(也是在适配器设置后),尝试更改要设置的OnItemSelectedListener。这应该可以防止微调员在用户选择某个东西之前触发其听众。 YOURCLASSNAME不管你的当前类的名称,该代码人死亡。

private void populateSpinner() { 
    //Spinner spinnerKostenstellen; 
    //spinnerKostenstellen = (Spinner) findViewById(R.id.spinner2); 
    //spinnerKostenstellen = (Spinner) SpinnerLayout.findViewById(R.id.spinner2); 

    AlertDialog.Builder adb2 = new AlertDialog.Builder(this); 
    LayoutInflater adbInflater2 = LayoutInflater.from(this); 
    View SpinnerLayout = adbInflater2.inflate(R.layout.spinner, null); 
    adb2.setView(SpinnerLayout); 
    adb2.setTitle("Kostenstelle auswählen:"); 
    spinnerKostenstellen = (Spinner) SpinnerLayout.findViewById(R.id.spinner2); 
    spinnerKostenstellen.setSelection(1, false); 
    //spinnerKostenstellen.setCallbackDuringFling(false); 
    List<String> lables = new ArrayList<String>(); 

    for (int i = 0; i < kostenstellenList.size(); i++) { 
     lables.add(kostenstellenList.get(i).getKst()); 
    } 

    // Creating adapter for spinner 
    //ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item); 

    //ArrayAdapter<String> kostenstellenList = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item); 
    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, lables); 
    // Drop down layout style - list view with radio button 
    spinnerAdapter 
     .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // attaching data adapter to spinner 
    spinnerKostenstellen.setAdapter(spinnerAdapter); 
    // use .create to get the AlertDialog 
    AlertDialog dialog = adb2.create(); 
    // set an OnShowListener 
    dialog.setOnShowListener(new DialogInterface.OnShowListener() { 
     @Override 
     public void onShow(DialogInterface dialog) { 
      spinnerKostenstellen.setOnItemSelectedListener(YOURCLASSNAME.this); 
     } 
    }); 
    dialog.show(); 
} 
+0

不会改变任何东西,它仍然选择自动 – hevilp 2015-02-05 17:36:36

+0

谢谢,也加入了空白处。 – hevilp 2015-02-05 18:17:49

+0

我没有改变任何东西,现在它不再工作。但我没有在代码:( – hevilp 2015-02-22 14:34:37