【问题标题】:Spinner Item Selected not working Android选定的微调器项目不起作用Android
【发布时间】:2020-04-13 03:11:17
【问题描述】:

我已经实现了一个 android spinner 小部件,当我添加一个具有固定字符串值的 arrayList 并将其设置为微调器适配器时,它工作正常,但是当涉及到动态获取数据(Web 服务)并通过 a 添加到微调器时for 循环它不起作用。在这两种情况下,数据都被填充到微调器到微调器,但在单击时无法从微调器中获取所选项目。

OrderRequestActivity 类

    public class OrderRequestActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    private LinearLayout itemLinear;
    String token = "";
    CategoryModel categoryModel;
    Spinner spinner;
    ArrayList<String> categoryDataArrayList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.layout_order_request);
        spinner = (Spinner) findViewById(R.id.spinner);
        categoryDataArrayList = new ArrayList<String>();
        token = CommonUtilities.getPreference(this,"token");

        getCategoryWebService();

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

        // Drop down layout style - list view with radio button
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // attaching data adapter to spinner
        spinner.setAdapter(dataAdapter);
        spinner.setOnItemSelectedListener(this);

        Log.e("Token OrderRequest",token);

    }

    public void lookingItemClick(View v) {
        Intent i = new Intent(OrderRequestActivity.this,OrderExchangeActivity.class);
        startActivity(i);
    }


    private void getCategoryWebService(){
        WebServiceController.getResponse("GET", OrderRequestActivity.this, "order/categories", null, true,token, new WebServiceController.VolleyCallback() {
            @Override
            public void onSuccess(String result) {
                try {
                    Log.e("Response result",result);
                    categoryModel = new CategoryModel().response(result);
                    CommonUtilities.setPreference(OrderRequestActivity.this,"CategoryData",result);
                    for (int i=0;i<=categoryModel.getData().size();i++) {
                        categoryDataArrayList.add(categoryModel.getData().get(i).getCategoryName());
                        Log.e("CategoryName >> ",categoryModel.getData().get(i).getCategoryName());
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onError(String error) {
                try {
                    Log.e("Response Error",error);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(parent.getContext(), "Selected: " + parent.getSelectedItem(), Toast.LENGTH_LONG).show();
    }

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

    }
}

【问题讨论】:

  • 这是因为您在 onCreate() 中设置了适配器,而只是在 onSuccess() 中更改了 categoryDataArrayList。您需要将更改通知适配器。调用 adapter.notifyDataSetChanged()。这应该工作:)
  • @Prashant.J 我应该在 onSuccess 中设置适配器并只通知那里吗?
  • 是的,这将完成工作:)
  • 希望我已经回答了您的问题?我忘了添加它作为答案,我已经添加为评论:(
  • 但是@Prashant.J 您提供的解决方案不起作用,伙计。通过这样做甚至无法点击微调器

标签: android android-spinner


【解决方案1】:

您需要通知适配器列表数据已更改。将dataAdapter 设为班级成员

private ArrayAdapter<String> dataAdapter;

并在更新项目列表后在onSuccess 内调用dataAdapter.notifyDataSetChanged();

// NOTE: changed to i < size, not i <= size or you will get an array bounds exception
for (int i=0;i<categoryModel.getData().size();i++) {
    categoryDataArrayList.add(categoryModel.getData().get(i).getCategoryName());
}
dataAdapter.notifyDataSetChanged();

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多