我有一个ListView,我使用BaseAdapter插入了值。 这是我的BaseAdapter的源代码
.header ul {
list-style-type:none;
margin:0;
padding:0;
position: static;
margin-bottom:2px;
}
header li {
display:inline-block;
float: left;
margin-right: 1px;
}
ul li
{
display:inline-block;
padding-right:10%;
background-color:gray;
padding:10px;
}
ul li:hover
{
background-color:blue;
color:white;
}
ul li
{display:inline-block;}a
{
text-decoration:none;
}
在Edittext的addTextChangedListener方法中,我尝试按名称搜索值。搜索工作完美但当我点击项目时,从所选项目中选择始终首先迭代 例如,我在arraylist中有['一个',两个'三个'四个']元素,如果我搜索四个'(在listview中我只能显示'四')但是当我点击所选项目时 resutl是' one'总是我的arraylist中的第一个元素 我不知道我的代码中有什么问题
private class BankNameAdapter extends BaseAdapter {
Context activity;
int layoutResourceId;
Bank bank;
private List<Bank> data;
private List<Bank> orig;
UserHolder holder = null;
public BankNameAdapter(Context context, int layoutResourceId, List<Bank> data) {
this.layoutResourceId = layoutResourceId;
this.activity = context;
this.data = data;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = LayoutInflater.from(activity);
holder = new UserHolder();
row = inflater.inflate(layoutResourceId, parent, false);
holder.PersonType = (TextView) row.findViewById(R.id.spinner_tittle);
row.setTag(holder);
} else {
holder = (UserHolder) row.getTag();
}
bank = data.get(position);
holder.PersonType.setText(bank.getBank());
return row;
}
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
final FilterResults oReturn = new FilterResults();
final ArrayList<Bank> results = new ArrayList<>();
if (orig == null)
orig = data;
if (constraint != null) {
if (orig != null && orig.size() > 0) {
for (final Bank uBanks : orig) {
if (uBanks.getBank().toLowerCase()
.contains(constraint.toString()))
results.add(uBanks);
}
}
oReturn.values = results;
}
return oReturn;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
data = (ArrayList<Bank>) results.values;
notifyDataSetChanged();
}
};
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
class UserHolder {
public TextView PersonType;
}
}
这是我的代码 如果有人知道解决方案,请加上我感谢所有人
答案 0 :(得分:1)
这是一个问题
@Override
public Object getItem(int position) {
return data.get(position);
}
正确答案是
@Override
public Bank getItem(int position) {
return data.get(position);
}
Bank bank = bankNameAdapter.getItem(position);
工作完美。我解决了自己
答案 1 :(得分:0)
替换你的
Bank bank = bankList.get(position);
与
Bank bank = (Bank)parent.getItemAtPosition(position);