回收者视图不刷新并显示数据

时间:2019-09-05 10:33:44

标签: java android database android-studio android-recyclerview

在我的回收站视图中,当添加数据时,recycelr视图在用户关闭活动并再次打开它之前不会显示它。 我认为这与notifydataetchanger有关。 请帮助我

目前唯一有效的方法是创建一个Intent。 但这使应用程序变得很糟糕

我的适配器

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class Rec_adaptor_aza extends RecyclerView.Adapter<Rec_adaptor_aza.ViewHolder> {
    Context context;

    public Rec_adaptor_aza(Context context, List<Model_aza> list_aza) {
        this.context = context;
        this.list_aza = list_aza;
    }

    List<Model_aza> list_aza;
    @NonNull
    @Override
    public Rec_adaptor_aza.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
       View view= LayoutInflater.from(context).inflate(R.layout.rec_row_aza,parent,false);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull Rec_adaptor_aza.ViewHolder holder, int position) {
    Model_aza modelAza =list_aza.get(position);
    holder.txt_name.setText(modelAza.getName_aza());
    holder.txt_semat.setText(modelAza.getSemat_aza());
    holder.txt_saat_voood.setText(modelAza.getSaaat_vorood_aza());
    holder.txt_saat_khoroo.setText(modelAza.getSaat_khorooj_aza());

    }

    @Override
    public int getItemCount() {
        return list_aza.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView txt_name,txt_semat,txt_saat_voood,txt_saat_khoroo;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            txt_name=itemView.findViewById(R.id.txt__person__name);
            txt_semat=itemView.findViewById(R.id.txt__person__semat);
            txt_saat_voood=itemView.findViewById(R.id.txt__person__enter);
            txt_saat_khoroo=itemView.findViewById(R.id.txt__person__out);

        }
    }
}

我的模型班

package com.example.myapplication;

public class Model_aza {
    private String name_aza;
    private String semat_aza;
    private String saaat_vorood_aza;

    public String getName_aza() {
        return name_aza;
    }

    public void setName_aza(String name_aza) {
        this.name_aza = name_aza;
    }

    public String getSemat_aza() {
        return semat_aza;
    }

    public void setSemat_aza(String semat_aza) {
        this.semat_aza = semat_aza;
    }

    public String getSaaat_vorood_aza() {
        return saaat_vorood_aza;
    }

    public void setSaaat_vorood_aza(String saaat_vorood_aza) {
        this.saaat_vorood_aza = saaat_vorood_aza;
    }

    public String getSaat_khorooj_aza() {
        return saat_khorooj_aza;
    }

    public void setSaat_khorooj_aza(String saat_khorooj_aza) {
        this.saat_khorooj_aza = saat_khorooj_aza;
    }

    private  String saat_khorooj_aza;
}

我的活动

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class Activity_Gozaresh_giri extends AppCompatActivity {
    private static final String TAG = "gozaresh_activity";
    List<Model_aza> list_aza;
    Rec_adaptor_aza rec_adaptor_aza;
    public static Context context;
    SQLiteDatabase sqLiteDatabase;
    ImageButton btn__add__field, btn__add__field1;
    final DataBase_aza dataBase_aza = new DataBase_aza(this);
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gozaresh_giri);
        btn__add__field1 = findViewById(R.id.btn__add__field1);
        btn__add__field = findViewById(R.id.btn__add__field);
        int id=getIntent().getIntExtra("id",0);
        list_aza = new ArrayList<>();
        Log.d(TAG, "onCreate: onclicked");

        btn__add__field.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EditText edtname = findViewById(R.id.edt__person__name);
                EditText edt_semat_aza = findViewById(R.id.edt__person__semat);
                EditText edt_vorood_aza = findViewById(R.id.edt__person__enter);
                EditText edt_khorooj_aza = findViewById(R.id.edt__person__out);
                String name_aza = edtname.getText().toString();
                String semat_aza = edt_semat_aza.getText().toString();
                String saat_vorood_aza = edt_vorood_aza.getText().toString();
                String saat_khorooj_aza = edt_khorooj_aza.getText().toString();
                long result = dataBase_aza.insert_info(name_aza, semat_aza, saat_vorood_aza, saat_khorooj_aza,id);
                Toast.makeText(Activity_Gozaresh_giri.this, result + "", Toast.LENGTH_SHORT).show();
            }
        });
        Cursor cursor1 = dataBase_aza.cursor(id);
        for (cursor1.moveToFirst(); !cursor1.isAfterLast(); cursor1.moveToNext()) {
            Model_aza modelAza = new Model_aza();
            modelAza.setName_aza(cursor1.getString(1));
            modelAza.setSemat_aza(cursor1.getString(2));
            modelAza.setSaaat_vorood_aza(cursor1.getString(3));
            modelAza.setSaat_khorooj_aza(cursor1.getString(4));
            list_aza.add(modelAza);
        }
        RecyclerView recyclerView_aza = findViewById(R.id.rec_aza);
        recyclerView_aza.setAdapter(new Rec_adaptor_aza(this, list_aza));
        recyclerView_aza.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    }

}

我的数据库

package com.example.myapplication;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class DataBase_aza extends SQLiteOpenHelper {

    public DataBase_aza(@Nullable Context context) {
        super(context, "datbase_aza", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL("create table if not exists database_aza (_id integer primary key autoincrement,_name varcher(55) not null,_semat varcher(55) not null, _vorood varcher(6) not null, _khorooj varchar(22) not null, id__item__gozaresh integer(55))");
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {


    }

    public long insert_info(String name, String semat, String vorood, String khorooj, int id) {

        ContentValues cv = new ContentValues();
        cv.put("_name", name);
        cv.put("_semat", semat);
        cv.put("_vorood", vorood);
        cv.put("_khorooj", khorooj);
        cv.put("id__item__gozaresh", id);
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        return sqLiteDatabase.insert("database_aza", null, cv);

    }

    public Cursor cursor(int id) {
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
        return sqLiteDatabase.rawQuery("SELECT * FROM database_aza where id__item__gozaresh="+id, null);


    }
}

我希望回收站视图在用户单击添加按钮后立即显示数据

4 个答案:

答案 0 :(得分:0)

添加条目后,仅通知数据集更改为如下所示的适配器

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gozaresh_giri);
    btn__add__field1 = findViewById(R.id.btn__add__field1);
    btn__add__field = findViewById(R.id.btn__add__field);
    int id=getIntent().getIntExtra("id",0);
    list_aza = new ArrayList<>();
    Log.d(TAG, "onCreate: onclicked");


    rec_adaptor_aza = new Rec_adaptor_aza(this, list_aza);
    RecyclerView recyclerView_aza = findViewById(R.id.rec_aza);

    recyclerView_aza.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
     recyclerView_aza.setAdapter(rec_adaptor_aza);


    Cursor cursor1 = dataBase_aza.cursor(id);
    for (cursor1.moveToFirst(); !cursor1.isAfterLast(); cursor1.moveToNext()) {
        Model_aza modelAza = new Model_aza();
        modelAza.setName_aza(cursor1.getString(1));
        modelAza.setSemat_aza(cursor1.getString(2));
        modelAza.setSaaat_vorood_aza(cursor1.getString(3));
        modelAza.setSaat_khorooj_aza(cursor1.getString(4));
        list_aza.add(modelAza);
    }

    rec_adaptor_aza.notifyDataSetChanged();

    btn__add__field.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText edtname = findViewById(R.id.edt__person__name);
            EditText edt_semat_aza = findViewById(R.id.edt__person__semat);
            EditText edt_vorood_aza = findViewById(R.id.edt__person__enter);
            EditText edt_khorooj_aza = findViewById(R.id.edt__person__out);
            String name_aza = edtname.getText().toString();
            String semat_aza = edt_semat_aza.getText().toString();
            String saat_vorood_aza = edt_vorood_aza.getText().toString();
            String saat_khorooj_aza = edt_khorooj_aza.getText().toString();
            long result = dataBase_aza.insert_info(name_aza, semat_aza, saat_vorood_aza, saat_khorooj_aza,id);

            rec_adaptor_aza.notifyDataSetChanged(); // change here
            Toast.makeText(Activity_Gozaresh_giri.this, result + "", Toast.LENGTH_SHORT).show();
        }
    });

}

答案 1 :(得分:0)

layoutmanager中将adapter设置为recylerview之前先设置activity,如下所示

    RecyclerView recyclerView_aza = findViewById(R.id.rec_aza);
    // set layout manager before set adapter
    recyclerView_aza.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    recyclerView_aza.setAdapter(new Rec_adaptor_aza(this, list_aza));

希望它对您有帮助。 快乐编码

答案 2 :(得分:0)

按如下所示使用它:-

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gozaresh_giri);
    btn__add__field1 = findViewById(R.id.btn__add__field1);
    btn__add__field = findViewById(R.id.btn__add__field);
    int id=getIntent().getIntExtra("id",0);
    list_aza = new ArrayList<>();
    Rec_adaptor_aza  adapter = new Rec_adaptor_aza(this, list_aza);  // Add
    RecyclerView recyclerView_aza = findViewById(R.id.rec_aza);
    recyclerView_aza.setAdapter(adapter);
    recyclerView_aza.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    btn__add__field.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText edtname = findViewById(R.id.edt__person__name);
            EditText edt_semat_aza = findViewById(R.id.edt__person__semat);
            EditText edt_vorood_aza = findViewById(R.id.edt__person__enter);
            EditText edt_khorooj_aza = findViewById(R.id.edt__person__out);
            String name_aza = edtname.getText().toString();
            String semat_aza = edt_semat_aza.getText().toString();
            String saat_vorood_aza = edt_vorood_aza.getText().toString();
            String saat_khorooj_aza = edt_khorooj_aza.getText().toString();
            long result = dataBase_aza.insert_info(name_aza, semat_aza, saat_vorood_aza, saat_khorooj_aza,id);
            Model_aza modelAza = new Model_aza();   // Add
            modelAza.setName_aza(name_aza);// Add
            modelAza.setSemat_aza(semat_aza);// Add
            modelAza.setSaaat_vorood_aza(saat_vorood_aza);// Add
            modelAza.setSaat_khorooj_aza(saat_khorooj_aza);// Add
            list_aza.add(modelAza);// Add
            adapter.notifyDataSetChanged();// Add
            Toast.makeText(Activity_Gozaresh_giri.this, result + "", Toast.LENGTH_SHORT).show();
        }
    });
    Cursor cursor1 = dataBase_aza.cursor(id);
    for (cursor1.moveToFirst(); !cursor1.isAfterLast(); cursor1.moveToNext()) {
        Model_aza modelAza = new Model_aza();
        modelAza.setName_aza(cursor1.getString(1));
        modelAza.setSemat_aza(cursor1.getString(2));
        modelAza.setSaaat_vorood_aza(cursor1.getString(3));
        modelAza.setSaat_khorooj_aza(cursor1.getString(4));
        list_aza.add(modelAza);
    }
    adapter.notifyDataSetChanged();// Add
}

答案 3 :(得分:0)

只需添加以下代码,在您的 clickListner 中,您需要在列表中添加相同的对象,添加后,您需要使用通知适配器有关插入项的信息。 notifyDataSetChanged()。

btn__add__field.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EditText edtname = findViewById(R.id.edt__person__name);
                EditText edt_semat_aza = findViewById(R.id.edt__person__semat);
                EditText edt_vorood_aza = findViewById(R.id.edt__person__enter);
                EditText edt_khorooj_aza = findViewById(R.id.edt__person__out);
                String name_aza = edtname.getText().toString();
                String semat_aza = edt_semat_aza.getText().toString();
                String saat_vorood_aza = edt_vorood_aza.getText().toString();
                String saat_khorooj_aza = edt_khorooj_aza.getText().toString();
                long result = dataBase_aza.insert_info(name_aza, semat_aza, saat_vorood_aza, saat_khorooj_aza,id);
                Toast.makeText(Activity_Gozaresh_giri.this, result + "", Toast.LENGTH_SHORT).show();

                /*
                * Adding entered data in list*/
                Model_aza mm=new Model_aza();
                mm.setName_aza(name_aza);
                mm.setSemat_aza(semat_aza);
                mm.setSaaat_vorood_aza(saat_vorood_aza);
                mm.setSaat_khorooj_aza(saat_khorooj_aza);

                list_aza.add(mm);
                rec_adaptor_aza.notifyDataSetChanged();

            }
        });