首页 > 解决方案 > 按标签引用微调器

问题描述

我有一个带有几个动态创建的 Spinner 的 ScrollView。每个 spinner 在循环中都有 Tag 标记,并且有共同的 setOnItemSelectedListener。但是当事件发生时,我有这个错误:“尝试在空对象引用上调用虚拟方法'java.lang.String java.lang.Object.toString()'”标记为***的字符串。看起来它不适用于微调器。同时,它与 ImageView 配合得很好。为什么?

void ShowList() {
        LinearLayout linLayout = (LinearLayout) findViewById(R.id.nrlinLayout);
        LayoutInflater ltInflater = getLayoutInflater();
        linLayout.removeAllViews();
        for (int i = 0; i < Trans.size(); i++) {
            View item = ltInflater.inflate(R.layout.list_rnd, linLayout, false);
            ImageView ivDelete=(ImageView) item.findViewById(R.id.rndDeleted);
            ivDelete.setTag(i);
            ivDelete.setOnClickListener(v-> {
                Trans.remove(Integer.parseInt(v.getTag().toString()));
                ShowList();
            });
            Spinner sp=(Spinner) item.findViewById(R.id.rndspinner);
            acts = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, Actions);
            acts.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            sp.setAdapter(acts);
            sp.setTag(i);
            sp.setSelection(Trans.get(i)-1);
            sp.setOnItemSelectedListener(new OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parentView, View v, int position, long id) {
***                   int ind = Integer.parseInt(v.getTag().toString());
                   Trans.set(ind, position + 1);
                }
                @Override
                public void onNothingSelected(AdapterView<?> parentView) {
                }
            });
            item.getLayoutParams().width = LinearLayout.LayoutParams.MATCH_PARENT;
            linLayout.addView(item);
        }
    }

标签: javaandroid

解决方案


i_A_mok 在评论中回答:v 是用于在微调器中显示文本的 TextView,因此将 v.getTag() 更改为 parentView.getTag()。


推荐阅读