Android Studio: отображение ArrayList строк базы данных SQLite с помощью ListView - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть база данных SQLite, и я хочу отобразить каждый ROW / Campsite, используя ListView.

Метод DBHandler для возврата ArrayList of Campsites:

public ArrayList<Campsite> getAllCampsites() {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CAMPSITES, null);
    ArrayList<Campsite> campsites = new ArrayList<>();
    Campsite campsite;
    if (cursor.getCount() > 0) {
        for (int i = 0; i < cursor.getCount(); i++) {
            cursor.moveToNext();
            campsite = new Campsite();
            campsite.setName(cursor.getString(1));
            campsite.setCity(cursor.getString(2));
            campsite.setFeature(cursor.getString(3));
            campsite.setFavorite(cursor.getString(4));
            campsite.setRating(cursor.getInt(5));
            campsite.setLatitude(cursor.getDouble(6));
            campsite.setLongitude(cursor.getDouble(7));

            campsites.add(campsite);
        }
    }
    cursor.close();
    db.close();
    return campsites;
}

У меня есть действие, которое называется Browseкоторый имеет ListView в файле макета.У меня также есть browse_row_layout с макетом для одной строки / места для лагеря.

Так что в Browse.java мне нужно создать адаптер для отображения каждого места для лагеря.Примечание: я показываю только 3 определенных столбца (имя, город, объект) в виде списка

Итак, у меня есть файл макета activity_browse, в котором есть действительный элемент ListView и browse_row_layout, который представляет 1 строку базы данных иимеет TextViews только для 3 столбцов.

Что у меня есть:

import android.os.Bundle;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;

public class Browse extends AppCompatActivity {

ListView lvCampsites;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_browse);

    lvCampsites= findViewById(R.id.lvCampsites);

    DatabaseHandler db = new DatabaseHandler(this);
    ArrayList<Campsite> campsites = db.getAllCampsites();

}

}

TLDR: как создать адаптер для отображения каждого лагеря изсписок кемпинга, который имеет каждую строку базы данных, используя ListView.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Создайте собственный класс адаптера, который расширяет BaseAdapter, а затем реализуйте методы, а затем в методе getView передайте идентификатор макета в представление, чтобы вы могли получить доступ к текстовому представлению в файле макета.

public class CampsitesListAdapter extends BaseAdapter {

    private Context mContext;
    private ArrayList<Campsites> list;

    public CampsitesListAdapter(Context mContext , List<Campsites> countries) {
        this.mContext = mContext;
        this.list = countries;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View view = View.inflate(mContext, R.layout.campsite_layout , null );
        TextView name = (TextView) view.findViewById(R.id.nametxt);
        Textview city = (Textview) view.findViewById(R.id.citytxt);
        Textview feature = (Textview) view.findViewById(R.id.featuretxt);

        name.setText(list.get(position).getname());
        city.setText(list.get(position).getcity());
        feature.setText(list.get(position).getfeature());

        return view;
    }
 }

Это ваша деятельность по просмотру списка

import android.os.Bundle;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;

public class Browse extends AppCompatActivity {

ListView lvCampsites;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_browse);

    lvCampsites= findViewById(R.id.lvCampsites);

    DatabaseHandler db = new DatabaseHandler(this);
    ArrayList<Campsite> campsites = db.getAllCampsites();

    //Instance of custom adapter 
    CampsitesListAdapter adapter = new CampsitesListAdapter(this ,   campsites);
   //Setting adapter to listview
   lvCampsites.setAdapter(adapter);
}

Надеюсь, это может вам помочь.

0 голосов
/ 27 сентября 2019

Вам нужно сначала переместить курсор.см. код ниже:

                         if (cursor!=null && cursor.getCount()> 0){
                            cursor.moveToFirst();
                            do{
                                Campsite campsite = new Campsite();
                                campsite.setName(cursor.getString(1));
                                campsite.setCity(cursor.getString(2));
                                campsite.setFeature(cursor.getString(3));
                                campsite.setFavorite(cursor.getString(4));
                                campsite.setRating(cursor.getInt(5));
                                campsite.setLatitude(cursor.getDouble(6));
                                campsite.setLongitude(cursor.getDouble(7));

                                campsites.add(campsite);

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