android - Android spinner onselect AsyncTask
问题描述
我有 2 个微调器元素,只有当用户更改任何微调器的选择时,我才想启动异步任务。
问题是,当我在设备上启动活动时,两个异步任务都会立即启动,即使用户没有选择任何内容。
我尝试了什么:
final Spinner sp1 = findViewById(R.id.spinner1);
final Spinner sp2 = findViewById(R.id.spinner2);
final List<String> list = new ArrayList<String>();
list.add(getString(R.string.text1));
list.add(getString(R.string.text2));
list.add(getString(R.string.text3));
final List<String> list2 = new ArrayList<String>();
list2.add(getString(R.string.item1));
list2.add(getString(R.string.item2));
list2.add(getString(R.string.item3));
ArrayAdapter<String> adp1 = new ArrayAdapter<String>(this,
R.layout.spinner_item, list);
adp1.setDropDownViewResource(R.layout.my_spinnerlist);
sp1.setAdapter(adp1);
sp1.setSelection(((ArrayAdapter)sp1.getAdapter()).getPosition(default1));
ArrayAdapter<String> adp2 = new ArrayAdapter<String>(this,
R.layout.spinner_item, list2);
adp2.setDropDownViewResource(R.layout.my_spinnerlist);
sp2.setAdapter(adp2);
sp2.setSelection(((ArrayAdapter)sp2.getAdapter()).getPosition(default2));
sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
String item1 = list.get(position);
actorsList = new ArrayList<>();
adapter = new ActorAdapter(Zoznam.this, "Zoznam", R.layout.novinkydata_item, actorsList);
lv.setAdapter(null);lv.setAdapter(adapter); adapter.notifyDataSetChanged();
lv.setVisibility(VISIBLE);
new GetContacts(Zoznam.this).execute(item1,"");
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
sp2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
String item2 = list2.get(position);
actorsList = new ArrayList<>();
adapter = new ActorAdapter(Zoznam.this, "Zoznam", R.layout.novinkydata_item, actorsList);
lv.setAdapter(null);lv.setAdapter(adapter); adapter.notifyDataSetChanged();
lv.setVisibility(VISIBLE);
new GetContacts(Zoznam.this).execute("",item2);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
那么为什么在活动开始后立即为两个听众启动新的 GetContacts(Zoznam.this).execute... 呢?我认为 setOnItemSelectedListener 应该仅在用户与选择进行交互时才启动,而不是默认情况下。
我这里有什么问题吗?
PS:当我与第一个微调器交互时,它工作正常,只启动了 1 个 AsyncTask,如果我与第二个微调器交互,则相同 - 仅启动第二个 AsyncTask。
问题只是当我开始活动时,两个 AsyncTask 都会在没有与微调器进行任何交互的情况下启动。
解决方案
设置监听器时会触发监听器,因为它会触发onItemSelected。
推荐阅读
- qt - QQml组件初始化
- android - 如何将 Firebase Firestore 与 Fragments 一起使用?
- android - 许多 GeoJSON 或 shapefile 点作为 Android 中的地理围栏?
- python - 对于语句,SQLalchemy 行数始终为 -1
- java - 从给定的单链表中反转偶数(仅)
- javascript - 如何在打字稿中动态合并两个数组对象?
- arduino - ESP8266 连接到 wifi,但没有注册它
- facebook - Facebook 服务器到服务器的事件中的用户数据
- r - 行上的相关性
- java - Wildfly 不需要的 EJB 注入