Передача проверенных элементов в виде списка в массив / массив - PullRequest
1 голос
/ 10 апреля 2020

Эй, я новичок в разработке приложений android, и в этой ситуации я создаю мобильное приложение, которое хранит данные в базе данных SQLite и отображает их в виде списка, а элементы в списке можно проверить с помощью флажков. .

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

Я использовал SparseBooleanArray для хранения отмеченных элементов, но я понятия не имею, чтобы передать значения SparseBooleanArray в БД, и я застрял там. Помогите мне с этим, и спасибо заранее.

*

public class Subscribe extends AppCompatActivity {


    ListView lanList;
    DatabaseHelper translateDB;
    TextView textView;
    Button button;
    ArrayList<String> list = new ArrayList<>();
    String clicked;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_subscribe);
        translateDB = new DatabaseHelper(this);
        textView = findViewById(R.id.textView);
        lanList = findViewById(R.id.listView);
        button = findViewById(R.id.subscribeBtn);



        showLang();

    }



    public void showLang(){
        final Cursor cursor = translateDB.retriveLang();
        System.out.println("1");
        if (cursor.getCount() == 0){
            Toast.makeText(Subscribe.this, "No data", Toast.LENGTH_LONG).show();
            return;
        }

        System.out.println("2");
        while (cursor.moveToNext()) {
            list.add(cursor.getString(1));
        }


        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_multiple_choice,list);

        lanList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        lanList.setAdapter(arrayAdapter);


        lanList.setItemChecked(1,true);     <--- used this to check the functioning 

        lanList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                clicked = adapterView.getItemAtPosition(i).toString();
                Toast.makeText(Subscribe.this,"You selected '"+ clicked+"' " , Toast.LENGTH_LONG).show();
            }
        });


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SparseBooleanArray checkedItems =lanList.getCheckedItemPositions();
                System.out.println("1 - " +checkedItems);




                if (checkedItems != null) {
                    for (int i=0; i<checkedItems.size(); i++) {
                        if (checkedItems.valueAt(i)) {
                            String item = lanList.getAdapter().getItem(
                                    checkedItems.keyAt(i)).toString();
                            System.out.println("2 - " +item);
                            translateDB.subscribedLang(item);
                        }   
                    }       
                }



            }
        });

    }

*

ТАК, что я планирую сделать, это передать проверенные позиции в БД и получить позиции и lanList.setItemChecked (x, true); и передайте значения позиций этому коду.

Помогите мне с этим.

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