gpt4 book ai didi

java - 从自定义 ListView 元素中的 Spinner getSelectedItem

转载 作者:行者123 更新时间:2023-11-29 22:39:48 25 4
gpt4 key购买 nike

我在谷歌上搜索了很多,但没有结果。我有一个自定义的 ListView,每个元素都有几个 TextView 和 3 个 Spinners 和按钮。当我在微调器上设置值并按下按钮时,我想从这些微调器中获取选择的值并将它们发送到服务器。对于从顶部到最后一个可见元素的列表元素,一切正常,但对于不可见或一半可见的项目,会发生 2 次坏事。

如果我更改微调器上的值,按下按钮保存,根据我处理的元素会发生两件事:

  1. 如果元素是一半,或者在 Activity 加载时有点可见,并且我对其执行了这些步骤,则传递的值是我更改它之前设置的值。

  2. 如果元素根本不可见并且我对其执行了步骤,则应用程序崩溃并出现 NullPointerException,将错误链接到 Spinner 的声明。

代码:

适配器:

public View getView(final int position, View convertView, final ViewGroup parent) {

StudentList students = studentList.get(position);

LayoutInflater inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
final View view = inflater.inflate(R.layout.student_list, null);

TextView id = (TextView) view.findViewById(R.id.list_id);
TextView name = (TextView) view.findViewById(R.id.list_name);
TextView surname = (TextView) view.findViewById(R.id.list_surname);
Spinner t1 = (Spinner) view.findViewById(R.id.list_t1);
Spinner t2 = (Spinner) view.findViewById(R.id.list_t2);
Spinner t3 = (Spinner) view.findViewById(R.id.list_t3);
TextView final = (TextView) view.findViewById(R.id.list_final);
Button save = (Button) view.findViewById(R.id.save);

id.setText(students.getId());
name.setText(students.getName());
surname.setText(students.getSurname());
final.setText(students.getFinal());

for (int i=0;i<t1.getCount();i++){
if (t1.getItemAtPosition(i).toString().equalsIgnoreCase(students.getT1())){
t1.setSelection(i);
}
}
for (int i=0;i<t2.getCount();i++) {
if (t2.getItemAtPosition(i).toString().equalsIgnoreCase(students.getT2())) {
t2.setSelection(i);
}
}

for (int i=0;i<t3.getCount();i++){
if (t3.getItemAtPosition(i).toString().equalsIgnoreCase(students.getT3())){
t3.setSelection(i);
}
}

if(t1.getSelectedItemPosition() > 1){
t2.setEnabled(false);
t3.setEnabled(false);
} else if (t2.getSelectedItemPosition() > 1){
t3.setEnabled(false);
}

save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

((ListView) parent).performItemClick(v, position, 0);
}
});



if(studentList.get(position).getProtokol().equals("open")){

} else {
t1.setEnabled(false);
t2.setEnabled(false);
t3.setEnabled(false);
save.setEnabled(false);
}


return view;
}

创建时:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
long viewId = view.getId();

Spinner t1 = (Spinner) parent.getChildAt(position).findViewById(R.id.lista_termin1);//There the app crashes if I do things I described above
Spinner t2 = (Spinner) parent.getChildAt(position).findViewById(R.id.lista_termin2);
Spinner t3 = (Spinner) parent.getChildAt(position).findViewById(R.id.lista_termin3);

if (viewId == R.id.save) {
String t1Itemn = t1.getSelectedItem());
String t2Itemn = t2.getSelectedItem());
String t3Itemn = t3.getSelectedItem());
//Code that sends those string to the server based on urlConnection - works perfectly fine)
}

}
});

最佳答案

我用谷歌搜索了 2 天,最后决定在这里发帖,但 1 小时后我找到了解决方案 here .像这样更改所有微调器:

Spinner t1 = (Spinner) parent.getChildAt(position-parent.parent.getFirstVisiblePosition()).findViewById(R.id.lista_termin1);

关于java - 从自定义 ListView 元素中的 Spinner getSelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59125340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com