私はこのコードを持っています。提案リストから項目を選択すると、まずonTextChangedが発生し、次にoItemClickedが発生します。今私は単語を選択するときに、 "onItemClicked"が最初に表示され、次に "onTextChanged"が表示されます。私はAndroidのドックを見ましたが、このトピックは言及していません。両方の呼び出しを回避する方法:onItemClickedとonTextChanged on AutoCompleteTextView
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) {
}
}
'beforeTextChanged()'が呼び出されたときにチェックされましたか? – Ronnie
なぜOnclickListener()内のすべてのものを行うことができないのですか? – Ronnie
はい、私はしました。 TextWatcherのすべての関数は、onItemClickの前に発生します。 – Emerald214