我对Android很陌生,我需要一些指导。
到目前为止,我有两项活动。第一个包含ActionBar和ListView。我希望ListView包含包含TextView和CheckBox的行。文本由从数据库读取的用户名表示.ActionBar具有操作按钮:“new”和“delete”。 “new”打开一个新活动,将新用户添加到数据库中,delete操作应该从列表和数据库中删除已检查的条目。屏幕:
创建个人资料活动:http://imgur.com/EbpD3
为了获得这些,我使用SQLiteHelper和数据库的数据源以及ListView的自定义ArrayAdapter。我有一个问题和一些问题,如下所示。
1。问题:当我添加新用户时,我只能在使用后退按钮退出应用程序后看到ListView中的更改。
2。自定义ArrayAdapter是一个很好的解决方案,还是我应该使用CursorAdapter?单击时,列表项应将与其关联的信息用于另一个活动/片段。下面是我的自定义适配器。它现在可以工作,但下一步是实现删除操作,我不完全确定我是如何做到的。这是我需要建议的地方。谢谢!
public class CustomUserAdapter extends ArrayAdapter<UserProfile>{
ArrayList<UserProfile> users;
private LayoutInflater inflater;
public CustomUserAdapter(Context context, ArrayList<UserProfile> users) {
// TODO Auto-generated constructor stub
super(context, R.layout.users_list_row, users);
this.users = users;
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
UserProfile user = users.get(position);
CheckBox checkBox;
TextView textView;
if(convertView == null){
convertView = inflater.inflate(R.layout.users_list_row, null);
checkBox = (CheckBox) convertView.findViewById(R.id.checkElement);
textView = (TextView) convertView.findViewById(R.id.textElement);
//tag row
convertView.setTag(new UserHolder(textView, checkBox));
} else {
UserHolder userHolder = (UserHolder) convertView.getTag();
checkBox = userHolder.getCheckBox();
textView = userHolder.getUserText();
}
//tag checkbox
checkBox.setTag(user);
//checkbox listener
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
checkBox.setChecked(false);
textView.setText(user.getUsername());
return convertView;
}
}
答案 0 :(得分:1)
1)更改你的arraylist后,记得调用“adapter.notifyDataSetChanged();”在您的适配器上与列表视图链接
2)arrayadapter应该可以正常工作。请记住,当您从arraylist中删除联系人时,请在适配器上再次调用notfiydatasetchanged。另外请记住,为了删除对象的Sql条目,您需要一个ID或某种ID,您可以引用您的SQLite数据库(id,自动增量是标准的)
这是一个用于在每个项目上实现侦听器并使用对话框删除的示例。
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) {
// TODO Auto-generated method stub
AlertDialog.Builder dialog = new AlertDialog.Builder(ContactExampleActivity.this);
dialog.setTitle("title");
dialog.setMessage("message");
dialog.setPositiveButton("delete", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
//delete from array and delete from sqlite database here
adapter.notifyDataSetChanged();
}
});
答案 1 :(得分:0)
问题:当我添加新用户时,我只能在使用后退按钮退出应用程序后看到ListView中的更改。
将新用户添加到ArrayList(users
)后,请务必在适配器上调用notifyDataSetChanged()
。
自定义ArrayAdapter是一个很好的解决方案,还是应该使用CursorAdapter?
如果UserProfile相当轻,并且没有任何方法(即,它只是数据),那么CursorAdapter可能会有一些很好的优势。否则,我会坚持使用ArrayAdapter。
单击时,列表项应将与其关联的信息用于另一个活动/片段。下面是我的自定义适配器。它现在可以工作,但下一步是实现删除操作,我不完全确定我是如何做到的。这是我需要建议的地方。
如何实现删除按钮取决于上述代码中未明确的几个因素。您可以使用复选框侦听器跟踪已选择的项目,然后在单击垃圾箱图标时删除所有选中的项目。在这种情况下一定要notifyDataSetChanged()
。