java - 按标签引用微调器
问题描述
我有一个带有几个动态创建的 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);
}
}
解决方案
i_A_mok 在评论中回答:v 是用于在微调器中显示文本的 TextView,因此将 v.getTag() 更改为 parentView.getTag()。
推荐阅读
- javascript - 如何在谷歌选择器中显示缩略图?
- linux - 找出哪个进程打开了一个短暂的端口
- vb.net - 在VB中,有没有办法创建当前类型的实例而不命名它?
- google-app-engine - 在 Windows 10 上安装 Google Cloud SDK 时出错
- input - Brainf*** 中如何处理输入?
- java - org.sqlite.SQLiteException:[SQLITE_NOTADB] 打开的文件不是数据库文件(文件已加密或不是数据库)[NETBEANS]
- c++ - 如何使用 BFS 重建路径
- reactjs - Loopback 4 提供的静态文件未在 kubernetes 上显示
- numpy - 张量大小未匹配损失函数
- python - 在 Python 上使用 Watchdog 时出现回溯错误