gpt4 book ai didi

android - 如何避免同时调用 : onItemClicked and onTextChanged on AutoCompleteTextView

转载 作者:IT老高 更新时间:2023-10-28 23:01:47 26 4
gpt4 key购买 nike

我有这个代码。当我从建议列表中选择一个项目时,首先发生 onTextChanged,然后是 oItemClicked。现在我想在选择单词时,首先出现“onItemClicked”,然后出现“onTextChanged”。我看了一下Android doc,但没有提到这个话题。

package com.autocompletetest;


import java.util.Arrays;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

public class OnItemClickAndOnTextChangedActivity extends Activity implements TextWatcher, OnItemClickListener {
private AutoCompleteTextView textView;

private static final String[] TEMP = new String[] {
"Beep", "Belgium", "Best", "Bubble", "Bye"
};
@Override
protected void onCreate(final Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

textView = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
textView.setOnItemClickListener(this);
textView.addTextChangedListener(this);
textView.setThreshold(1);

final List<String> list = Arrays.asList(TEMP);

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
OnItemClickAndOnTextChangedActivity.this,
android.R.layout.simple_dropdown_item_1line, list);
textView.setAdapter(adapter);
}

@Override
public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
System.out.println("OnTextChanged.");
}

@Override
public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
System.out.println("OnItemClick.");
}

@Override
public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {
}

@Override
public void afterTextChanged(final Editable s) {

}

}

更新:详细地说,这是我真正想做的事情。某些内容与问题标题无关。

package com.autocompletetest;


import java.util.Arrays;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

public class OnItemClickAndOnTextChangedActivity extends Activity implements TextWatcher, OnItemClickListener {
private AutoCompleteTextView textView;
private boolean itemClicked;

private static final String[] TEMP = new String[] {
"Beep", "Belgium", "Best", "Bubble", "Bye"
};
@Override
protected void onCreate(final Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

textView = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
textView.setOnItemClickListener(this);
textView.addTextChangedListener(this);
textView.setThreshold(1);

final List<String> list = Arrays.asList(TEMP);

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
OnItemClickAndOnTextChangedActivity.this,
android.R.layout.simple_dropdown_item_1line, list);
textView.setAdapter(adapter);
}

@Override
public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
System.out.println("OnTextChanged.");

// The below code block does:
// When type a word, make a new ArrayAdapter and set it for textView
// If any of word in suggestion list is clicked, nothing changes, dropdown list not shown.
if(itemClicked) {
itemClicked = false;
} else {
// Create new ArrayAdapter.
// textView is set to new ArrayAdapter.
// textView.showDropDown()
}
}

@Override
public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
System.out.println("OnItemClick.");
itemClicked = true;
}

@Override
public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {
}

@Override
public void afterTextChanged(final Editable s) {

}
}

最佳答案

isPerformingCompletion() 是在 API 级别 3 中添加的。它在从下拉列表中选择一个项目并且即将触发 TextWatcher 监听器后返回 true .简而言之,为了避免描述的行为:

public void onTextChanged(CharSequence s, int start, int before, int count) {
if (autoCompleteView.isPerformingCompletion()) {
// An item has been selected from the list. Ignore.
return;
}

// Your code for a general case
}

关于android - 如何避免同时调用 : onItemClicked and onTextChanged on AutoCompleteTextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055534/

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