gpt4 book ai didi

android - @Mention 使用 Multiautocompletetextview

转载 作者:太空狗 更新时间:2023-10-29 14:53:05 28 4
gpt4 key购买 nike

我想做什么

我想在聊天 Activity 中提及人和组。当用户输入@时,我想填充不包含用户和 channel 的列表这样他就可以同时提及人和 channel

我做了什么

我从这个问题中得到了帮助Android: Autocomplete TextView Similar To The Facebook App这里我包含了我的代码

1.有用户的Arraylist

   ArrayList<People> users = new ArrayList<User>();
for (People user : SocketSingleton.userMap.values()) {
if (user.getId() != loggedUserId) {
users.add(user);
}
}

2.包含组列表的Arraylist

ArrayList<Group> groups = new ArrayList<Group>();
for (Group channel : SocketSingleton.listgroups.values()) {
groups.add(channel);
}

3. View 适配器

final UserAdapter Adapter = new UserAdapter(getActivity(), R.layout.all_user_list_item, users);

final GroupAdapter Adapter1 = new GroupAdapter(getActivity(), R.layout.all_groups_list_item, Groups);

4.MultiAutocompletetextview

textinput = (MultiAutoCompleteTextView) view.findViewById(R.id.message_input);
textinput.setAdapter(Adapter);
textinput.setThreshold(0);

textinput.setTokenizer(new MultiAutoCompleteTextView.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 + " ";
}
}
}

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

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

//Check if token really started with @, else we don't have a valid token
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;
}
});
textinput.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Layout layout = textinput.getLayout();
int pos = textinput.getSelectionStart();
int line = layout.getLineForOffset(pos);
int baseline = layout.getLineBaseline(line);

int bottom = textinput.getHeight();

textinput.setDropDownVerticalOffset(baseline - bottom);

}

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

@Override
public void afterTextChanged(Editable s) {
}
});
textinput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int id, KeyEvent event) {
if (id == R.id.send || id == EditorInfo.IME_NULL) {
messageSend();
return true;
}
return false;
}
});

我遇到的问题

使用此代码我只能提及人。我只能为自动完成 tectview 设置 adapter1 或 adapter2。所以它只显示用户或组。我想在单个适配器中显示所有列表,以便用户可以提及人民和团体我是新手,请帮我想办法

最佳答案

MultiAutoCompleteTextView 不支持多种数据类型。但是,有几个开源库可以让您做到这一点。我在我正在从事的项目中有相同的要求,这是我们的开源解决方案,请随时查看: https://github.com/Teamwork/android-multiautocomplete

你可以通过这样做来实现:

MultiAutoComplete autoComplete = new MultiAutoComplete.Builder()
...
.addTypeAdapter(typeAdapter1)
.addTypeAdapter(typeAdapter2)
.build();

您还可以指定要用于每种类型适配器的过滤器类型和句柄(“@”或“#”或任何其他)。

关于android - @Mention 使用 Multiautocompletetextview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33867812/

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