gpt4 book ai didi

android - 带有自定义适配器的 MultiAutoCompleteTextView 显示乱码字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:50 25 4
gpt4 key购买 nike

这是对我之前的问题的跟进:Android: Autocomplete TextView Similar To The Facebook App .

背景:

我在问题(上面发布的链接)中的要求是拥有一个类似于 Facebook 应用程序和其他几个应用程序中使用的 AutoCompleteTextView。解决方案是使用多行 MultiAutoCompleteTextView 这个想法是让用户能够在创建状态更新时直接键入他们的 friend 姓名。从独立的角度来看,答案中的解决方案效果很好。然而,当我着手将解决方案集成到我现有的代码中时,它仍然可以使用正确的下拉菜单等。多亏了这里的解决方案,我看到了我 friend 的过滤列表:https://stackoverflow.com/a/12363961/1350013 .我使用带有 BaseAdapter 的自定义 ListView 而不是解决方案中的 GridView

问题:

我的代码使用了一个实现了FilterableBaseAdapter。如上所述,工作正常。

当我从过滤列表中选择一个 friend 时,问题就出在这里。 MultiAutoCompleteTextView 在选择后显示:@MY_PACKAGE_NAME.Friends.getFriends@406c1058 而不是 friend 的名字。我需要更改什么才能显示名称而不是乱码?如果有帮助,我运行它的类将扩展 SherlockActivity 而不是 SherlockListActivity

现在我不确定相关代码是什么来找出问题所在,所以我会尽可能多地发布相关代码。我是菜鸟,所以请放轻松并要求任何其他代码。我会及时遵守。同样,如果这里不需要的内容使帖子困惑,我会删除它。

代码块

The Tokenizer 来 self 之前问题的解决方案。链接在顶部(在onCreate()方法中)

editStatusUpdate = (MultiAutoCompleteTextView) findViewById(R.id.editStatusUpdate);
editStatusUpdate.addTextChangedListener(filterTextWatcher);

editStatusUpdate.setTokenizer(new Tokenizer() {

@Override
public CharSequence terminateToken(CharSequence text) {

int i = text.length();

while (i > 0 && text.charAt(i - 1) == ' ') {
i--;
}

if (i > 0 && text.charAt(i - 1) == ' ') {
return text;
} else {
if (text instanceof Spanned) {
SpannableString sp = new SpannableString(text + " ");
TextUtils.copySpansFrom((Spanned) text, 0, text.length(), Object.class, sp, 0);
return sp;
} else {
return text.toString() + " ";
}
}
}

@Override
public int findTokenStart(CharSequence text, int cursor) {

int i = cursor;

while (i > 0 && text.charAt(i - 1) != '@') {
i--;
}

if (i < 1 || text.charAt(i - 1) != '@') {
return cursor;
}

return i;
}

@Override
public int findTokenEnd(CharSequence text, int cursor) {

int i = cursor;
int len = text.length();

while (i < len) {
if (text.charAt(i) == ' ') {
return i;
} else {
i++;
}
}

return len;

}
});

TextWatcher,同样来自前面问题的解决方案:

private TextWatcher filterTextWatcher = new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

Layout layout = editStatusUpdate.getLayout();
int pos = editStatusUpdate.getSelectionStart();
int line = layout.getLineForOffset(pos);
int baseline = layout.getLineBaseline(line);

int bottom = editStatusUpdate.getHeight();

editStatusUpdate.setDropDownVerticalOffset(baseline - bottom);

}

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

}

@Override
public void afterTextChanged(Editable s) {

}
};

对于我的 ArrayList:

public class getFriends {

String friendID;
String friendName;
String friendProfile;

boolean selected;

// SET FRIENDS ID
public void setFriendID(String friendID) {
this.friendID = friendID;
}

// GET FRIENDS ID
public String getFriendID() {
return friendID;
}

// SET FRIENDS NAME
public void setFriendName(String friendName) {
this.friendName = friendName;
}

// GET FRIENDS NAME
public String getFriendName() {
return friendName;
}

// SET FRIENDS PROFILE
public void setFriendProfile(String friendProfile) {
this.friendProfile = friendProfile;
}

// GET FRIENDS PROFILE
public String getFriendProfile() {
return friendProfile;
}
}

最佳答案

您应该在过滤器中覆盖 convertResultToString(Object resultValue),其中 Object 是您的类。这使得您可以在不依赖重写 to String 方法的情况下为您的类创建自定义字符串。

关于android - 带有自定义适配器的 MultiAutoCompleteTextView 显示乱码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813539/

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