在我整天,我都在研究这个问题。
我有一个微调器和可扩展的列表视图。我的孩子视图首先有两个按钮。一个是“接受”,另一个是“拒绝”。我的旋转器有4种选择。首先是“等待请求”第二个是“接受请求”第三个是“拒绝请求”第四个是“所有请求”
我希望在我的程序首次启动时看到“等待请求”。 当我接受或拒绝时,我希望我的微调器动态变化。 (编辑:我想更新我的数据集而不是更改我的微调器。为此我需要刷新我的微调器。并且在使用微调器过滤我的数据后调用了adapter.notifydatasetchanged。我使用微调器根据记录(listview元素)类别过滤我的数据。) 对于动态更改,我首先使用了setSelection(position,true)代码。但这不起作用。所以我使用了setSelection(0,true);为setSelection(位置,TRUE); 我之所以使用两次的原因是因为如果旋转器已经被相同位置选中,则不会更新。所以首先我用这个代码将我的位置设置为0。 使用此代码设置实际所需位置后,“setSelection(0,true)”。 “setSelection(position,true)”
有了这两个代码,我知道我的微调器是动态的但是!属于我的listview子项的我的按钮不再有效。我无法点击我的按钮。
我使用线程来运行这两个代码段,但线程也无法解决我的问题。我开始认为这是一个bug问题。所以我想问一下stackoverflow。我在等什么想法?
这是我的微调代码:
spinner.setAdapter(spinnerAdapter); listview.setAdapter(适配器);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, final int position, long id) {
if (oldposition == position)
{
if(position!=0) {
spinner.setSelection(0, false);
spinner.setSelection(position, false);
}
else
{
spinner.setSelection(1, false);
spinner.setSelection(position, false);
}
}
oldposition = position;
parentsFiltered.clear();
if (parent.getItemAtPosition(position).equals("Tümü")) {
parentsFiltered.addAll(yedek);
parents.clear();
parents.addAll(parentsFiltered);
} else if (parent.getItemAtPosition(position).equals("Onaylananlar")) {
filter(1);
} else if (parent.getItemAtPosition(position).equals("Reddedilenler")) {
filter(2);
} else if (parent.getItemAtPosition(position).equals("Bekleyenler")) {
filter(0);
}
dateFilter();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
parentsFiltered.clear();
parentsFiltered.addAll(yedek);
parents.clear();
parents.addAll(parentsFiltered);
adapter.notifyDataSetChanged();
adapter.notifyDataSetInvalidated();
}
});
提前致谢..
答案 0 :(得分:0)
是的我解决了我的问题。我无法解决setselection问题,但不是那样,我决定从另一个方向走。我没有使用setselection方法。我只是在我的接受和拒绝按钮的onclick方法中添加我的过滤方法。这解决了这个问题。