【问题标题】:How to get Result for RecyclerView using Spinner in Android Studio如何在 Android Studio 中使用 Spinner 获取 RecyclerView 的结果
【发布时间】:2020-12-05 00:52:16
【问题描述】:

你好,你们能帮帮我吗?

我正在做一个应用程序,它将显示场所。用户还可以使用 Spinner 对其进行过滤以简化搜索。但我无法过滤 Spinner,结果似乎无法在 RecyclerView 中显示

MainActivity.java

公共类 MainActivity 扩展 AppCompatActivity {

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

    Intent intent = getIntent();
    EditText txtPremiseSearch = findViewById(R.id.txtPremiseSearch);
    RecyclerView rcvPremise = findViewById(R.id.rcvPremises);
    Spinner spnCategory = (Spinner) findViewById(R.id.spnCategory);

    //Spinner
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.premise_type));
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spnCategory.setAdapter(adapter);

    spnCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //txtPremiseSearch.setText(parent.getItemAtPosition(position).toString());
        }

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

        }
    });

    //Dummy list of premises
    Vector<Premises> premises = new Vector<>();
    Premises premises1 = new Premises(), premises2 = new Premises(), premises3 = new Premises();

    premises1.setPremiseID("001");
    premises1.setName("Medan Selera Presint 8");
    premises1.setRole("Restaurant");

    premises2.setPremiseID("002");
    premises2.setName("Old Precint Cafe");
    premises2.setRole("Cafe");

    premises3.setPremiseID("003");
    premises3.setName("Gloria Jean's Cafe");
    premises3.setRole("Cafe");

    premises.add(premises1);
    premises.add(premises2);
    premises.add(premises3);

    Toast.makeText(this, "Welcome " + intent.getStringExtra("name") + " to the Administration module!", Toast.LENGTH_LONG).show();

    rcvPremise.setAdapter(new PremisesAdapter(this, premises));
    rcvPremise.setLayoutManager(new LinearLayoutManager(this));

enter image description here

【问题讨论】:

  • 不确定你在问什么。但是你应该在 setLayoutManager 之后而不是之前调用 setAdaper。
  • 意思是,Spinner 的 setadapter 应该在 RecyclerView 的 setLayoutManager 之后调用是吗?
  • @ADM 我希望用户可以使用 Spinner 过滤 recyclerview,但不幸的是,在用户过滤后,它不会影响 recyclerview,抱歉英语不好

标签: java android android-studio android-recyclerview android-spinner


【解决方案1】:

可能是因为回收站视图尚未更新。尝试运行 setLayoutManager b4 setAdapter,然后再次声明适配器并设置适配器,当用户单击微调器上的选定项目时

【讨论】:

  • 已经改变了,但是当我在微调器中选择任何选项时,它不会显示基于 RecyclerView 中微调器的结果过滤器。有关如何使其在 RecyclerView 中显示微调器的过滤结果的任何解决方案?
  • 你可以使用 if else 或 switch,例如 if(userSelected.equals("001") { rcvPremise.setAdapter(new PremisesAdapter(this, places1)); }
猜你喜欢
  • 1970-01-01
  • 2022-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
相关资源
最近更新 更多