Адаптер делает все элементы несортированными после сортировки элементов в базе данных SQLite? - PullRequest
0 голосов
/ 17 мая 2019

Я делаю приложение для заметок на основе Android с категориями.Я должен сортировать категории по названию и дате создания.Я вставил столбец даты создания в таблице категорий в базе данных sqlite.я также использовал запрос с помощью предложения ORDER BY и всякий раз, когда я щелкаю по опции «Заголовок и дата создания» в меню параметров.Адаптер отсортирован соответственно.Но всякий раз, когда я перезапускаю приложение, отсортированный адаптер сбрасывается, и все элементы отображаются несортированными, так как адаптер установлен в методе onCreate.Я хочу сохранить состояние отсортированного адаптера, но не могу понять логику.

Я перепробовал все возможные решения, которые мне приходят в голову, я использовал глобальную переменную chkSort, чтобы определить, какой запрос должен быть реализован.Но всякий раз, когда я перезапускаю приложение, эта переменная инициализируется как «по умолчанию», и снова устанавливается несортированный адаптер.

Это мой фрагмент из двух классов:

public class MainScreen extends AppCompatActivity
{
ArrayList<DataModelCategory> lists = new ArrayList<>();
String query,chkSort="default";
RecyclerView recyclerView;
    GridLayoutManager gridLayoutManager;
    RecyclerView.Adapter adapter;
    RecyclerAdapter recyclerAdapter;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_screen);
 recyclerView = findViewById(R.id.recyclerMain);
        recyclerView.setHasFixedSize(true);
        gridLayoutManager = new GridLayoutManager(this, 4);
        recyclerView.setLayoutManager(gridLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        adapter = new RecyclerAdapter(this, lists);
        recyclerAdapter=new RecyclerAdapter(this,lists);

            lists.clear();
            final DataAdapterCategory db = new DataAdapterCategory(getApplicationContext());
            db.openDB();
            Cursor cursor = db.getAllData(chkSort);
            while (cursor.moveToNext()) {
                int id = cursor.getInt(0);
                String categName = cursor.getString(1);
                DataModelCategory dataModelCategory = new DataModelCategory(id, categName);
                lists.add(dataModelCategory);

            }
            if (!(lists.size() < 1)) {
                recyclerView.setAdapter(adapter);

                txt.setVisibility(View.INVISIBLE);
            }
            else {
                txt.setVisibility(View.VISIBLE);
            }
            db.closeDB();

   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        switch (id) {
            case R.id.action_notebook: {
                // create an alert builder
                AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
                alertBuilder.setTitle("New notebook");
                alertBuilder.setCancelable(false);

                // set the custom layout
                final View customLayout = getLayoutInflater().inflate(R.layout.notebook_dialog, null);
                alertBuilder.setView(customLayout);

                // add a button
                alertBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {


                        EditText editText = customLayout.findViewById(R.id.editName);
                        String label = editText.getText().toString();
                        if (label.trim().length() > 0) {
                            // send data from the AlertDialog to the Activity


                            sendDialogDataToActivity(editText.getText().toString());

                            save(editText.getText().toString());
                            lists.clear();
                            DataAdapterCategory db = new DataAdapterCategory(getApplicationContext());
                            db.openDB();
                            Cursor cursor = db.getAllData(chkSort);
                            while (cursor.moveToNext()) {
                                int id = cursor.getInt(0);
                                String categName = cursor.getString(1);
                                DataModelCategory dataModelCategory = new DataModelCategory(id, categName);
                                lists.add(dataModelCategory);

                            }
                            if (!(lists.size() < 1)) {

                                recyclerView.setAdapter(adapter);
                                //startActivity(new Intent(MainActivity.this,MainActivity2.class));
                                txt.setVisibility(View.INVISIBLE);
                            }

                            db.closeDB();
                            // database handler
                            DatabaseHandler dbs = new DatabaseHandler(getApplicationContext());
                            // inserting new label into database
                            dbs.insertLabel(label);
                            // Hiding the keyboard
                            InputMethodManager imm = (InputMethodManager)
                                    getSystemService(Context.INPUT_METHOD_SERVICE);
                            imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
                            // loading spinner with newly added data
                            //  loadSpinnerData();
                        }
                        else {
                            Toast.makeText(getApplicationContext(), "Please enter label name.",
                                    Toast.LENGTH_SHORT).show();
                            dialog.cancel();
                        }
                    }
                });
                // negative button
                alertBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });

                // create and show the alert dialog
                AlertDialog alert = alertBuilder.create();
                alert.show();
            }
            break;
}
}
}
public class DataAdapterCategory extends AppCompatActivity
{

Context c;
    SQLiteDatabase db;
    DBHelperText helper;

    public DataAdapterCategory(Context c) {
        this.c = c;
        helper=new DBHelperText(c);
    }

//INSERT
    public long add(String categoryName,String date)
    {
        try
        {
            ContentValues cv=new ContentValues();
            cv.put(Constants.CATEGORY_NAME,categoryName);
            cv.put(Constants.CATEGORY_DATE,date);
            return db.insert(Constants.TB_NAME_CAT,Constants.ROW_ID_CAT,cv);
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        return 0;
    }
 //RETRIEVE OR VIEW
    public Cursor getAllData(String chkSort)
    {
        String[] columns={Constants.ROW_ID_CAT,Constants.CATEGORY_NAME,Constants.CATEGORY_DATE};
        if (chkSort.equals("Title"))
        {
            return db.query(Constants.TB_NAME_CAT,columns,null,null,null,null,Constants.CATEGORY_NAME + " ASC");
        }
        else if (chkSort.equals("DateCreated"))
        {
            return db.query(Constants.TB_NAME_CAT,columns,null,null,null,null,Constants.CATEGORY_DATE + " DESC");
        }
        else
        {
            return db.query(Constants.TB_NAME_CAT,columns,null,null,null,null,null);
        }

    }
}

Я хочусохраняйте отсортированный адаптер даже после перезапуска приложения. Например, если пользователь щелкнул меню сортировки по параметрам и щелкнул, чтобы отсортировать категории по дате, созданной в диалоговом окне с предупреждением, то после перезапуска приложения адаптер должен выглядеть отсортированным по дате создания.Но, к сожалению, я не могу понять, как это сделать, потому что каждый раз, когда я запускаю приложение, оно становится не отсортированным. Где я должен установить адаптер в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...