我几天来一直在努力解决这个问题,我有一个从服务器加载的项目列表。加载项目时,我显示列表,然后为每个微调器设置所选项目。现在这些是我的问题。
案例1: 我的适配器中每个项目的onItemSelectedListener在页面加载时被触发。
所以我在网上进行了一些研究并决定使用变量来检查状态。创建视图时,我在on click侦听器中将firstTime设置为true,如下所示:
viewHolder.spStatus.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (!firstTime) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Confirm");
builder.setMessage("Are you sure you want to change this?");
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
int selectedPosition = Integer.parseInt(viewHolder.id.getTag().toString());
String selectedId = viewHolder.id.getText().toString();
updateStatus(selectedPosition, selectedId,
((ArrayAdapter<String>) viewHolder.spStatus.getAdapter())
.getItem(selectedPosition));
}
});
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do nothing
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
firstTime = false;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Do Nothing
}
});
现在这就是我执行此操作时发生的事情,当我滚动onItemSelected更改侦听器时,根据我放置firstTime=false
的位置触发,或者当我过滤列表时,我必须在触发事件之前点击两次。< / p>
答案 0 :(得分:0)
如果我理解正确,您的ViewHolder
itemView
包含Spinner
。您希望能够以编程方式设置Spinner
的选定位置,而不会触发OnItemSelectedListener
的{{1}}。
目前您正在使用匿名Spinner
。如果您将此侦听器设为OnItemSelectedListener
类
ViewHolder
...然后你可以在以编程方式设置所选位置之前“取消设置”监听器,然后像下面的方法那样“重置”它:
private OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener(){
// listener code goes here
// ...
};
答案 1 :(得分:0)
Kotlin中RecyclerView Adapter的解决方案
@bot.command()
async def embed(ctx, *, data):
data = data.split('-') # title = 0, desc = 1, footer=2
embed = discord.Embed(
title=f"{data[0]}", description=f"{data[1]}", color=0x00ff00)
embed.set_footer(text=f"{data[2]}")
await ctx.send(embed=embed)
答案 2 :(得分:0)
你可以这样做,
public void setSelection(int position, boolean animate, boolean noTrigger, OnItemSelectedListener onItemSelectedListener) {
if(noTrigger) {
Log.e("SET_SELECTION", "No trigger at position " + position);
this.setOnItemSelectedListener(null);
}
super.setSelection(position, animate);
this.post(new Runnable() {
@Override
public void run() {
setOnItemSelectedListener(onItemSelectedListener);
}
});
}