Java 数据库操作后如何刷新listView
在对列表视图执行操作后,如何更新其数据?在自定义适配器的Java 数据库操作后如何刷新listView,java,android,database,listview,adapter,Java,Android,Database,Listview,Adapter,在对列表视图执行操作后,如何更新其数据?在自定义适配器的onClick中?在主活动中,是否继续?我看到很多关于这方面的帖子,但每次他们只是给出一行代码,而不是放在哪里 我的自定义适配器: class CustomAdapter extends ArrayAdapter { private Context context; private LayoutInflater inflater; private ArrayList<Contact> array
onClick
中?在主活动中,是否继续?我看到很多关于这方面的帖子,但每次他们只是给出一行代码,而不是放在哪里
我的自定义适配器:
class CustomAdapter extends ArrayAdapter {
private Context context;
private LayoutInflater inflater;
private ArrayList<Contact> arrayList; //Lui transmettre le tableau adapter
private ContactDatabase db;
public CustomAdapter(Context context, ArrayList<Contact> arrayList){
super(context, R.layout.contact_list, arrayList);
db = new ContactDatabase(context);
this.context = context;
inflater = LayoutInflater.from(context);
this.arrayList = arrayList;
}
private class ViewHolder{
TextView txtName, txtPhone;
ImageView tete, dial;
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
//Reglage general
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.contact_list, parent, false); //Layout du design
//Recuperation des ID
viewHolder.txtName = convertView.findViewById(R.id.clName);
viewHolder.txtPhone = convertView.findViewById(R.id.clNumber);
viewHolder.tete = convertView.findViewById(R.id.cl_icone);
viewHolder.dial = convertView.findViewById(R.id.cl_dial);
//Definition du tag
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
//Definition des changements
final Contact contact = arrayList.get(position);
//viewHolder.txtName.setText(db.dbToString(position + 1));
viewHolder.txtName.setText(Integer.toString(contact.getId()));
viewHolder.txtPhone.setText(contact.getPhone());
viewHolder.tete.setImageResource(contact.getImage());
//Change color
// int backgroundColor = ContextCompat.getColor(context, contact.getColor());
// viewHolder.txtPhone.setTextColor(backgroundColor);
//OnClick sur l'icone telephone
viewHolder.dial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("tel:" + contact.getPhone()));
//context.startActivity(intent);
db.delete(contact.getId());
}
});
// //OnClick sur l'icone image
viewHolder.tete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent intent = new Intent(context, AddContactActivity.class); //On creer l'intent de donnee
// intent.putExtra("BUNDLE", args); //On place les donnes enregistrer dans l'intent quon fera passe
// intent.putExtra("index", position); //On place les donnes enregistrer dans l'intent quon fera passe
// ((Activity) context).startActivityForResult(intent, 100);
}
});
return convertView;
}
}
My Main Activity:
public class MainActivity extends AppCompatActivity{
private ListView listView;
private FloatingActionButton btnAdd;
private ArrayList<Contact> contacts;
ContactDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Definition des ID
btnAdd = findViewById(R.id.btn_add);
listView = findViewById(R.id.list_view); //Recheche du listView
listView.setEmptyView(findViewById(R.id.empty_list)); //Si listView est vide alors on affiche ce message
//Listener pour le button ADD
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, AddContactActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onResume() {
super.onResume();
//Creation de ladapter
db = new ContactDatabase(this);
contacts = db.getData();
CustomAdapter adapter = new CustomAdapter(this, contacts);
listView.setAdapter(adapter);
}
}
class CustomAdapter扩展了ArrayAdapter{
私人语境;
私人充气机;
私有ArrayList ArrayList;//Lui Transmetre le tableau适配器
私有数据库数据库;
公共CustomAdapter(上下文上下文,ArrayList ArrayList){
super(上下文、R.layout.contact_列表、arrayList);
db=新联系人数据库(上下文);
this.context=上下文;
充气器=充气器。从(上下文);
this.arrayList=arrayList;
}
私有类视窗持有者{
TextView txtName、txtPhone;
图像视图太特,拨号;
}
@非空
@凌驾
公共视图getView(最终整数位置,@Nullable View convertView,@NonNull ViewGroup父级){
持票人持票人;
if(convertView==null){
//总务室
viewHolder=新的viewHolder();
convertView=充气机。充气(R.layout.contact_list,parent,false);//布局设计
//疗养院
viewHolder.txtName=convertView.findViewById(R.id.clName);
viewHolder.txtPhone=convertView.findViewById(R.id.clNumber);
viewHolder.tete=convertView.findViewById(R.id.cl_icone);
viewHolder.dial=convertView.findViewById(R.id.cl\u拨号);
//标签的定义
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
//变化的定义
最终联系人=arrayList.get(位置);
//viewHolder.txtName.setText(db.dbToString(位置+1));
viewHolder.txtName.setText(Integer.toString(contact.getId());
viewHolder.txtPhone.setText(contact.getPhone());
viewHolder.tete.setImageResource(contact.getImage());
//变色
//int backgroundColor=ContextCompat.getColor(context,contact.getColor());
//viewHolder.txtPhone.setTextColor(backgroundColor);
//伊康河畔OnClick电话
viewHolder.dial.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(android.content.Intent.ACTION\u视图,
parse(“tel:+contact.getPhone());
//背景。开始触觉(意图);
db.delete(contact.getId());
}
});
////OnClick sur l'icone image
viewHolder.tete.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//Intent Intent=newintent(context,AddContactActivity.class);//关于creer l'Intent de donnee
//intent.putExtra(“BUNDLE”,args);//在les donnes Enregister dans l'intent quon fera passe广场
//intent.putExtra(“索引”,位置);//在les donnes Enregister dans l'intent quon fera passe广场
//((活动)背景)。startActivityForResult(意图,100);
}
});
返回视图;
}
}
我的主要活动:
公共类MainActivity扩展了AppCompatActivity{
私有列表视图列表视图;
私有浮动操作按钮btnAdd;
私人ArrayList联系人;
数据库数据库;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//标识的定义
btnAdd=findviewbyd(R.id.btn_-add);
listView=findViewById(R.id.list_view);//重新检查listView
listView.setEmptyView(findViewById(R.id.empty_list));//Si listView可查看附加消息
//按钮添加
btnAdd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(MainActivity.this、AddContactActivity.class);
星触觉(意向);
}
});
}
@凌驾
受保护的void onResume(){
super.onResume();
//激光雷达
db=新联系人数据库(此);
contacts=db.getData();
CustomAdapter=新的CustomAdapter(此为联系人);
setAdapter(适配器);
}
}
你能告诉我要放的代码以及放在哪里吗?这样每次操作后我的listView都会自动刷新
每次操作后,mylistView会自动刷新
只需调用adapter.notifyDataSetChanged()代码>当您需要刷新列表视图时
notifyDataSetChanged()
通知附加的观察者基础数据已更改,任何反映数据集的视图都应刷新自身
示例代码
CustomAdapter adapter = new CustomAdapter(this, contacts);
adapter.notifyDataSetChanged();
在代码中
@Override
protected void onResume() {
super.onResume();
//Creation de ladapter
contacts.clear();
db = new ContactDatabase(this);
contacts.addAll(db.getData());
adapter.notifyDataSetChanged();
}
使用
在列表视图中添加或删除代码的位置
private ListView listView;
private FloatingActionButton btnAdd;
private ArrayList<Contact> contacts;
ContactDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Definition des ID
btnAdd = findViewById(R.id.btn_add);
listView = findViewById(R.id.list_view); //Recheche du listView
listView.setEmptyView(findViewById(R.id.empty_list)); //Si listView est vide alors on affiche ce message
//Listener pour le button ADD
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, AddContactActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onResume() {
super.onResume();
//Creation de ladapter
db = new ContactDatabase(this);
contacts = db.getData();
CustomAdapter adapter = new CustomAdapter(this, contacts);
listView.setAdapter(adapter);
}
私有ListView ListView;
私有浮动操作按钮btnAdd;
私人ArrayList联系人;
数据库数据库;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//标识的定义
btnAdd=findviewbyd(R.id.btn_-add);
listView=findViewById(R.id.list_view);//重新检查listView
listView.setEmptyView(findViewById(R.id.empty_list));//Si listView可查看附加消息
//按钮添加
btnAdd.setOnClickListener(新视图.OnClickListener(){
@超越
private ListView listView;
private FloatingActionButton btnAdd;
private ArrayList<Contact> contacts;
ContactDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Definition des ID
btnAdd = findViewById(R.id.btn_add);
listView = findViewById(R.id.list_view); //Recheche du listView
listView.setEmptyView(findViewById(R.id.empty_list)); //Si listView est vide alors on affiche ce message
//Listener pour le button ADD
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, AddContactActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onResume() {
super.onResume();
//Creation de ladapter
db = new ContactDatabase(this);
contacts = db.getData();
CustomAdapter adapter = new CustomAdapter(this, contacts);
listView.setAdapter(adapter);
}
private ListView listView;
private FloatingActionButton btnAdd;
private ArrayList<Contact> contacts=new ArrayList<>();
ContactDatabase db;
CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Definition des ID
btnAdd = findViewById(R.id.btn_add);
listView = findViewById(R.id.list_view); //Recheche du listView
listView.setEmptyView(findViewById(R.id.empty_list)); //Si listView est vide alors on affiche ce message
adapter = new CustomAdapter(this, contacts);
listView.setAdapter(adapter);
//Listener pour le button ADD
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, AddContactActivity.class);
startActivity(intent);
}
});
@Override
protected void onResume() {
super.onResume();
//Creation de ladapter
contacts.clear();
db = new ContactDatabase(this);
contacts.addAll(db.getData());
adapter.notifyDataSetChanged();
}