![](/img/trans.png)
[英]OnItemClickListener not working with AutoCompleteTextView
[英]OnItemClickListener for multiple AutoCompleteTextView with switch case not working
我在布局中有多個AutoCompleteTextView
,所以我已經全局實現了AdapterView.OnItemClickListener
。
現在的問題是,
我無法在偵聽器中使用switch
case 來比較AutoCompleteTextView
,
代碼
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
switch (v.getId()) {
case R.id.ac_education:
s_ac_education = testArray[position];
break;
case R.id.ac_ethincity:
s_ac_ethincity = testArray[position];
break;
case R.id.ac_languages:
s_ac_languages = testArray[position];
break;
case R.id.ac_location:
s_ac_location = testArray[position];
break;
case R.id.ac_religion:
s_ac_religion = testArray[position];
break;
case R.id.ac_travel:
s_ac_travel = testArray[position];
break;
}
}
注意: view.getId()
總是返回相同的值,我也試過if-else
但這也不起作用。 (我已經浪費了幾個小時)
編輯
private void init(View v) {
ac_languages = v.findViewById(R.id.ac_languages);
ac_religion = v.findViewById(R.id.ac_religion);
ac_location = v.findViewById(R.id.ac_location);
ac_travel = v.findViewById(R.id.ac_travel);
ac_ethincity = v.findViewById(R.id.ac_ethincity);
ac_education = v.findViewById(R.id.ac_education);
ptr.setACTVAdapter(getActivity(), ac_education, ac_ethincity, ac_languages, ac_location, ac_religion, ac_travel);
ac_languages.setHint(R.string.languages);
ac_religion.setOnItemClickListener(this);
ac_religion.setHint(R.string.religion);
ac_location.setOnItemClickListener(this);
ac_location.setHint(R.string.where_do_you_live);
ac_travel.setOnItemClickListener(this);
ac_travel.setHint(R.string.where_can_you_travel);
ac_ethincity.setOnItemClickListener(this);
ac_ethincity.setHint(R.string.ethincity);
ac_education.setOnItemClickListener(this);
ac_education.setHint(R.string.education);
}
setAdapter(在另一個類中定義)
public void setACTVAdapter(Activity activity, AutoCompleteTextView... actv) {
testArray = activity.getResources().getStringArray(R.array.testArray);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity, android.R.layout.simple_list_item_1, testArray);
for (AutoCompleteTextView ac : actv) {
ac.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
謝謝
首先,創建您的自定義 onItemClickListener:
public class MyClickListener implements AdapterView.OnItemClickListener {
AutoCompleteTextView ac;
public MyClickListener(AutoCompleteTextView myAc){
ac = myAc;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
switch(ac.getId()){
case R.id.autocomplete_1:
//your code
break;
case R.id.autocomplete_2:
//your code
break;
}
}
}
將它用於您的 AutoCompleteTextView:
autoCompleteTextView.setOnItemClickListener(new MyClickListener(autoCompleteTextView));
處理列表時不應依賴視圖,尤其是在設置常規項目單擊偵聽器時。
而是在您的AutoCompleteTextView
適配器的public View getView(int position, View convertView, ViewGroup parent)
方法上通過每個視圖的 id 獲取每個視圖的實例,並聲明一個單擊偵聽器以處理您在那里的位置,如果您想設置多次單擊單獨一行的聽眾。
例如:
public class ExampleAdapter extends BaseAdapter {
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView.findViewById(R.id.ac_education);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Your code here
}
});
}
...
}
您要跟蹤的不是孩子的點擊次數,而是 convertView。
所以,如果你真的想在你的適配器之外處理子點擊,你可以這樣做:
public interface OnViewClickListener {
void onViewClick(View view, int position);
}
然后在您的適配器內部:
private OnViewClickListener mListener;
public void setOnViewClickListener(final OnViewClickListener listener) {
mListener = listener;
}
對於您想要的每個孩子:
child.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
if (mListener != null) {
mListener.onViewClick(v, position);
}
}
});
有了這個,您可以獲得項目點擊:
adapter.setOnViewClickListener(new OnViewClickListener() {
@Override
public void onViewClick(final View view, final int position) {
** PUT YOUR SWITCH CASE HERE! **
}
});
首先使用數組列表將數據設置到 Pojo 類中。 並作為 autotextview 的字符串返回。 使用 for 循環將該字符串與 arraylist 的項目值匹配。
autoPartyName.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
for (CustomersModel list : customersList) {
if(list.toString().equals(adapterView.getItemAtPosition(position))){
etContactPhone.setText(list.getContact());
etContactAddress.setText(list.getAddress());
}
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.