【问题标题】:set one spinner to empty value when other one is clicked单击另一个微调器时将一个微调器设置为空值
【发布时间】:2018-04-15 15:21:09
【问题描述】:

我有两个微调器,第一个显示运输线,第二个显示在第一个微调器上选择的线路的站点,问题是我想在单击第二个微调器时将第二个微调器设置为空值第一个,但我做不到。

private ArrayAdapter<String> arrayAdapter;
private MaterialBetterSpinner spinner;
private ArrayAdapter<String> arrayAdapter2;
private MaterialBetterSpinner spinner2;

我在第一个微调器的 onItemClick() 方法上尝试了一些选项,但它不能正常工作:

spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        @Override
        protected void onPreExecute() {
            // I'm trying all the options in this method
        }

        @Override
        protected String[] doInBackground(String... strings) {

        }

        @Override
        protected void onPostExecute(String[] result) {

        }
     }
});

选项 1:

arrayAdapter2.clear();
arrayAdapter2.notifyDataSetChanged();

选项2:

spinner2.setAdapter(null);

选项 3:

ArrayList<String> list = new ArrayList<>();
list.add("");
spinner2.setSelection(list.size()-1);

选项 4:

arrayAdapter2.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
spinner2.setAdapter(arrayAdapter2); 
spinner2.setSelection(arrayAdapter2.getCount());
spinner2.setOnItemSelectedListener(this);
arrayAdapter2.notifyDataSetChanged();

总而言之,有一种方法可以根据另一个微调器的值更改微调器的值吗?或者只是一种将微调器的值更改为空值的方法?

我们将不胜感激!

【问题讨论】:

    标签: android onclick spinner onclicklistener


    【解决方案1】:

    使用setOnItemSelectedListener 而不是OnItemClickListener,例如:

     spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
                {
                    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
                    {
                      if(pos==0) // you can change condition as per your requirement
                      {
                           arrayAdapter2.clear();
                           arrayAdapter2.notifyDataSetChanged();
                      }
    
                    }
    
                    public void onNothingSelected(AdapterView<?> parent) 
                    {
    
                    }
                });
    

    【讨论】:

    • 如果我使用 setOnItemSelectedListener 不起作用,我已经尝试过 onCreate() 方法和外部,不起作用...
    • 你不应该在 Spinner 上使用 OnItemClickListener,如果它不能与 OnItemSelectedListener 一起工作,那么还有一些其他问题存在设置断点或在 doInBackground 中记录你的数组
    • 我知道我应该使用OnItemSelectedListener 而不是OnItemClickListener,但是第一个对我不起作用,当我在微调器中选择一个项目时,该方法不执行任何操作,你说的数组和 AsyncTask 通常可以正常工作,所以我认为那里没有什么问题。
    【解决方案2】:

    完整代码:

    public class FillTransportPlaceActivity extends AppCompatActivity  {
    
        private ArrayAdapter<String> arrayAdapter;
        private MaterialBetterSpinner spinner;
        private ArrayAdapter<String> arrayAdapter2;
        private MaterialBetterSpinner spinner2;
        private ArrayList<String> list = new ArrayList<>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_fill_transport_place);
    
            arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
            spinner = findViewById(R.id.listLines);
            spinner.setAdapter(arrayAdapter);
    
            arrayAdapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
            spinner2 = findViewById(R.id.listStations);
            spinner2.setAdapter(arrayAdapter2);
    
            SharedPreferences sp = getApplicationContext().getSharedPreferences("transportButton", 0);
            boolean metro = sp.getBoolean("metro", false);
            boolean bus = sp.getBoolean("bus", false);
    
            spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    if(parent.getItemAtPosition(position).toString() != null) {
                        String choice = parent.getItemAtPosition(position).toString();
    
                        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)
                            new stationsDB().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, choice);
                        else
                            new stationsDB().execute(choice);
                    }
                }
            });
        }
    
        private class stationsDB extends AsyncTask<String, String[], String[]> {
            @Override
            protected String[] doInBackground(String... strings) {
                return DB_transportPlace.getStations(strings[0]);
            }
    
            @Override
            protected void onPostExecute(String[] result) {
                updateAdapter2(result);
            }
        }
    
        public void updateAdapter(String[] result) {
            arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, result);
            spinner.setAdapter(arrayAdapter);
        }
    
        public void updateAdapter2(String[] result) {
            arrayAdapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, result);
            spinner2.setAdapter(arrayAdapter2);
        }
    

    正如我所说,我尝试使用setOnItemSelectedListener 而不是OnItemClickListener,但它不起作用,只在onCreate 方法中执行一次,我只想在我将 spinner2 的值更改为空时更改 spinner1 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 2012-04-12
      相关资源
      最近更新 更多