项目要求
- 完善WECHAT项目中的“通讯录”模块
- 使用RecyclerView显示联系人
- 顶部Tab右上方新增联系人按钮
基本功能
- 添加联系人:单击“添加”按钮,弹出“用户信息输入”的对话框,输入信息后,即可添加联系人
- 联系人展示
完整代码
内容参考
效果演示
主要代码
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
userAccounts=new ArrayList<>();
myAdapter=new MyAdapter(this,userAccounts);
recyclerView=findViewById(R.id.recycleview);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(myAdapter);
initView();
initFragment();
selectfragment(0);
intEvent();
initList();
initData();
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
View view1= LayoutInflater.from(MainActivity.this).inflate(R.layout.dialogview,null,false);
final EditText edusername=view1.findViewById(R.id.ed_username);
final EditText edpassword=view1.findViewById(R.id.ed_password);
new AlertDialog.Builder(MainActivity.this)
.setTitle("用户信息输入")
.setView(view1)
.setPositiveButton("添加", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
UserAccount userAccount=new UserAccount();
userAccount.setUsername(edusername.getText().toString().trim());
userAccount.setPassword(edpassword.getText().toString().trim());
userAccounts.add(userAccount);
myAdapter.notifyDataSetChanged();
}
}).setNegativeButton("取消",null).show();
}
});
}
MyAdapter
public class MyAdapter extends RecyclerView.Adapter<MyHolder> {
private List<UserAccount>userAccounts;
private Context mContext;
public MyAdapter(Context context,List<UserAccount>userAccounts){
mContext=context;
this.userAccounts=userAccounts;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view= LayoutInflater.from(mContext).inflate(R.layout.itemview,null);
MyHolder myHolder=new MyHolder(view);
return myHolder;
}
@Override
public void onBindViewHolder(@NonNull MyHolder myHolder, int i) {
((TextView)myHolder.finViewById(R.id.tv_username)).setText(userAccounts.get(i).getUsername());
((TextView)myHolder.finViewById(R.id.tv_password)).setText(userAccounts.get(i).getPassword());
}
@Override
public int getItemCount() {
return userAccounts.size();
}
}
MyHolder.java
public class MyHolder extends RecyclerView.ViewHolder {
private View mView;
public MyHolder(@NonNull View itemView) {
super(itemView);
mView=itemView;
}
public View finViewById(int id){
return mView.findViewById(id);
}
}
UserAccount
public class UserAccount {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
总结
该项目相较之前更综合,将Recyclerview、Adapter等知识综合应用,整体的业务逻辑相对比较清晰,最主要的是明白了ContentProvider的用法
ContentProvider实现了不同APP之间数据共享,为其他应用程序提供了访问本应用程序的接口,其他应用程序可以通过ContentResolver来操作ContentProvider提供的数据,同时ContentProvider保证了被访数据的安全性,用户只需要关心操作数据的uri就可以了。
sql也有增删改查的方法,单sql只能操作本应用下的数据库。