これは、以前の私の質問へのフォローアップです: Android: Autocomplete TextView Similar To The Facebook App。
背景:
質問 (上記のリンク) での私の要件はAutoCompleteTextView
、Facebook アプリや他のいくつかで使用されているものと同様のものを用意することでした。解決策は、複数行を使用することMultiAutoCompleteTextView
でした。アイデアは、ユーザーがステータス更新を作成するときに、フレンドの名前を直接入力できるようにすることでした。回答のソリューションは、スタンドアロンの観点からは正常に機能します。ただし、ソリューションを既存のコードに統合し始めたとき、正しいドロップダウンなどで引き続き機能します。https://stackoverflow.com/a/12363961/1350013のソリューションのおかげで、フィルター処理された友達のリストが表示されます。ソリューションの の代わりにを使用してカスタムを使用しListView
ます。BaseAdapter
GridView
問題:
私のコードは、BaseAdapter
を実装するを利用していますFilterable
。上記のとおり、問題なく動作します。
フィルタリングされたリストからフレンドを選択すると、問題が発生します。を選択すると、フレンドの名前の代わりに次のようMultiAutoCompleteTextView
に表示されます。@MY_PACKAGE_NAME.Friends.getFriends@406c1058
文字化けしたテキストの代わりに名前を表示するには、何を変更する必要がありますか? それが役立つ場合、これを実行するクラスは、 ではSherlockActivity
なくを拡張しSherlockListActivity
ます。
問題がどこにあるのかを突き止めるための関連コードが何であるかわからないので、できるだけ多くの関連コードを投稿します。私は初心者なので、簡単に追加のコードを求めてください。速やかに対応いたします。同様に、ここで不要なものが投稿を乱雑にしている場合は、それを削除します。
コードブロック
私の以前の質問からのソリューションのトークナイザー。上部にリンク(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;
}
}