- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在聊天 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/
我正在尝试以这样的方式使用 MultiAutocompleteTextView,每当我在 TextView 中键入字符时,都会触发一个事件,或者在键入 2-3 个元素后,再次触发该事件。 我使用多重自
我有一个 MultiAutoCompleteTextView与 TextWatcher 相关联和一个适配器,它根据字段中输入的内容从数据库返回内容。这一切都正常工作,但我正在寻找一种方法来更改默认 t
我正在使用 MultiAutoCompleteTextView 从名称列表中提出建议,以便用户每次都输入有效名称。我遇到的问题是一个用户可以输入多个名称,而我希望用户只能输入一个名称然后移动到下一个表
我需要使用用户设备上联系人的电话号码创建一个 MultiAutoCompleteTextView。我需要的是类似于gmail;使用 gmail 电子邮件地址除外。对于联系人,我有以下需求: 每个电话号
我在我的应用程序中使用 MultiAutoCompleteTextView。这是 Android API 中的一个很棒的控件。但是我面临着一些问题。一,最烦人的是,在我的 Nexus 5 上,它不显示
我有一个 MultiAutoCompleteTextView。当我输入“Sal”时,它会提示“Salami”,但当我在框中按下它时,它会显示“Salami,”。 我怎么能阻止呢? 我的代码: void
我正在使用以下教程来实现 MultiAutoCompleteTextView : http://developer.android.com/reference/android/widget/AutoC
我的 Activity 中有此代码: ParseQuery query = ParseUser.getQuery(); query.findInBackground(new FindCallback(
我有一个 MultiAutoCompleteTextView我的 Activity 中的小部件,它有一个 ArrayAdapter由基于 Web 的调用的结果填充。当用户在 TextView 中键入字
当我在 multiautocompletetextview 中从键盘输入双空格时,我想添加逗号。我在谷歌上搜索了很多东西。但达不到我的目标。我想替换用户输入的双空格的逗号。 很明显,我必须在 addt
如何让我的 MultiAutoCompleteTextView 在每个列表位置的字符串中搜索(也意味着搜索子字符串)。是否需要设置任何属性或者甚至可能?例如,如果列表对象之一是“abc123”,那么是
我将 MultiAutoCompleteTextView 集成到我的字典应用程序中,所以现在集成它之后。 我在第二个屏幕截图中遇到了这样的问题... 所以现在我不想要那个 "," 如 ! 之后的第二个
我正在使用 MultiAutoCompleteTextView,它似乎可以正常处理以下异常:焦点在 MultiAutoCompleteTextView 中,按下软键盘上的“下一步”键不会将焦点移动到下
我遇到的问题是单击 MultiAutoCompleteTextView 时软键盘没有出现。当我第一次点击另一个 EditText,然后切换到 MultiAutoCompleteTextView 时,我
我有一个存储在 Firebase 中的标签列表。在我的一个 fragment 中,MultiAutoCompleteTextView (MACTV) 允许用户选择相关标签。 目标, 用于填充数组(用于
我已经尝试过常规方法,但它不起作用: multiEdit.requestFocus(); InputMethodManager imm = (InputMethodManager) getActivi
我试图找到设置 MultiAutoCompleteTextView 列表分隔符的方法,但它似乎没有 android:divider 属性或 setDivider() 方法。是否可以更改默认的分隔符资源
类似问题 Apply a style on MultiAutoCompleteTextView :问题是由于 OP 打算覆盖样式未声明的某些属性。这不是我的问题。 android: MultiAuto
关闭。 这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以
ArrayAdapter adapter1 = new ArrayAdapter(Application.getContext(), R.layout.report_add_list_item, Li
我是一名优秀的程序员,十分优秀!