【发布时间】:2019-07-15 12:37:22
【问题描述】:
我已经成功地在 arrayList 中检索了用户的电话联系人并将其上传到我的应用程序,在那里我还能够区分安装了我的应用程序的联系人(用户)和没有安装的联系人然而。我一直在尝试实现搜索功能,用户可以按姓名搜索联系人,但我没有得到任何结果。
哪位大神可以给点建议?
另外,我想对联系人的arrayList进行排序,以便安装了应用程序的人出现在recyclerview的顶部,按字母顺序排列,没有安装的人出现在最后一个应用程序用户之后,也排列按字母顺序?整个联系人列表已经按字母顺序排列,现在使用 Collections.sort(); 这是我迄今为止尝试过的。
ArrayList<UserObject> userList, contactList;
List<UserObject> filteredList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_contacts);
//adding the filteredList
contactList = new ArrayList<>();
userList = new ArrayList<>();
filteredList = new ArrayList<>();
mUserList = (RecyclerView) findViewById(R.id.userList); //recyclerview
mUserList.setNestedScrollingEnabled(false);
mUserList.smoothScrollToPosition(0);
mUserList.setHasFixedSize(true);
mUserListLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayout.VERTICAL, false);
mUserList.setLayoutManager(mUserListLayoutManager);
mUserListAdapter = new UserListAdapter(userList, filteredList);
mUserListAdapter.setHasStableIds(true);
mUserList.setAdapter(mUserListAdapter);
search = findViewById(R.id.searchh); //search is an Edittext
search.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
filteredList.clear();
String name = search.getText().toString();
for (UserObject userObject : userList){
if (userObject.getName().contains(name)){
filteredList.add(userObject);
}
}
mUserListAdapter.notifyDataSetChanged();
}
@Override
public void afterTextChanged(Editable editable) {
}
});
...
}
//我的用户列表适配器
public class UserListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
ArrayList<UserObject> userList;
List<UserObject> filteredList; //the filteredList
private Context context;
private static final int TYPE_ONE = 1;
private static final int TYPE_TWO = 2;
public UserListAdapter(ArrayList<UserObject> userList, List<UserObject> filteredList){
this.userList = userList;
this.filteredList = filteredList;
}
//some more code
//BindViewHolder
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
switch (holder.getItemViewType()){
case TYPE_ONE:
initLayoutOne((ViewHolderOne) holder, position);
break;
case TYPE_TWO:
initLayoutTwo((ViewHolderTwo) holder, position);
break;
default:
break;
}
}
//case one
private void initLayoutOne(final ViewHolderOne holder, final int position) {
holder.mName.setText(userList.get(position).getName());
holder.mPhone.setText(userList.get(position).getPhone());
//more code
});
...
}
如果我应该添加任何其他信息以帮助每个人更好地理解问题,请告诉我。 提前致谢。
【问题讨论】:
-
请先说你的问题是什么?请说明您是否可以使用 Kotlin?
-
您好 Saeed,我想搜索 userList,这是一个包含所有用户电话联系人的 arrayList。我该怎么办?如果您用 Java 提供解决方案,我将不胜感激,因为我对 Kotlin 并不那么精通。你还想让我在代码部分添加什么吗?提前致谢