【问题标题】:Takes time to set textview on OnSelectedItem of Spinner需要时间在 Spinner 的 OnSelectedItem 上设置 textview
【发布时间】:2015-02-25 06:40:09
【问题描述】:

适配器的Getview方法。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.list_items, parent, false);
    tvName = (TextView) rowView.findViewById(R.id.tvName);
    tvPrice = (TextView) rowView.findViewById(R.id.tvPrice);
    id = Integer.parseInt(values.get(position));
    tvName.setText(database.getItemName(id));
    spQuantity = (Spinner) rowView.findViewById(R.id.spQuantity);
    spQuantity.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long arg3) {
            // TODO Auto-generated method stub
            String selectedQuantity = parent.getItemAtPosition(position)
                    .toString();
            int selectedPrice = database.getPrice(id, selectedQuantity);
            Log.d("selectedPrice",""+selectedPrice); //showing correct value
            tvPrice.setText("Rs. " + selectedPrice); //not working
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });
    quantityList = database.getQuantityList(id);
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(context,
            R.layout.spinner_item_black, quantityList);
    dataAdapter
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spQuantity.setAdapter(dataAdapter);

    buttonAddtoCart = (LinearLayout) rowView
            .findViewById(R.id.buttonAddtoCart);
    buttonAddtoCart.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (database.checkDuplicateCart(id)) {
                Toast.makeText(context, "Already added to cart",
                        Toast.LENGTH_SHORT).show();
            } else {
                database.addtoCart(id);
                Toast.makeText(context, "Added to cart", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    });
    return rowView;

}

日志显示从数据库中获取的正确值。其他一切工作正常。但是 TextView 并没有改变它的值。只有 listview 的 TextView 的最后一行是第一次改变它的值。 但是当我们等待一段时间(大约 30 秒)时,文本视图会发生变化。为什么这需要这么长时间?

【问题讨论】:

  • 我认为您也应该在 onItemClick 之外设置价格文本。
  • 也需要发布相关布局,至少对于 R.layout.list_items。
  • @justDroid 会在选择项目时起作用。
  • 当你点击列表项时你想调用这个吗?
  • @justDroid 是的。当微调器上的选定项目发生变化时。我想改变文本视图

标签: android listview textview spinner onitemselectedlistener


【解决方案1】:

有时列表视图中的 Spinner 不会像我们想要的那样工作,尝试将您选择的值保存在局部变量中并在文本视图中设置值,试试我下面的答案 让我知道它是否有效

//这个只能初始化一次

   LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//尝试在getView中每次初始化TextView。我已经尝试使用基本适配器,它工作正常

         @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                 String Spinnerselecteditem;


                View rowView = inflater.inflate(R.layout.list_items, parent, false);
               TextView tvName = (TextView) rowView.findViewById(R.id.tvName);
               TextView tvPrice = (TextView) rowView.findViewById(R.id.tvPrice);
                id = Integer.parseInt(values.get(position));
                tvName.setText(database.getItemName(id));
                Spinner spQuantity = (Spinner) rowView.findViewById(R.id.spQuantity);


 quantityList = database.getQuantityList(id);
                ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(context,
                        R.layout.spinner_item_black, quantityList);
                dataAdapter
                        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spQuantity.setAdapter(dataAdapter);



                spQuantity.setOnItemSelectedListener(new OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view,
                            int position, long arg3) {
                        // TODO Auto-generated method stub
                        String selectedQuantity = parent.getItemAtPosition(position)
                                .toString();
                        int selectedPrice = database.getPrice(id, selectedQuantity);
                        Log.d("selectedPrice",""+selectedPrice); //showing correct value
        Spinnerselecteditem = String.ValueOf(selectedPrice); //save it in a local variable 

     tvPrice.setText("Rs. " + Spinnerselecteditem);

                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> arg0) {
                        // TODO Auto-generated method stub

                    }
                });




              LinearLayout  buttonAddtoCart = (LinearLayout) rowView
                        .findViewById(R.id.buttonAddtoCart);
                buttonAddtoCart.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        if (database.checkDuplicateCart(id)) {
                            Toast.makeText(context, "Already added to cart",
                                    Toast.LENGTH_SHORT).show();
                        } else {
                            database.addtoCart(id);
                            Toast.makeText(context, "Added to cart", Toast.LENGTH_SHORT)
                                    .show();
                        }
                    }
                });
                return rowView;

            }

【讨论】:

  • 这会在每次选择item时设置textview吗?
  • 查看我更新的答案,你也在 getview 中进行繁重的处理,这就是为什么需要花费大量时间来更新,尝​​试在适配器的构造函数中检索数据库值
猜你喜欢
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
相关资源
最近更新 更多