Добавление данных в список пунктов в разном количестве

303
27 июня 2017, 22:31

Приветствую! У меня есть 2 базы данных в первой 100 пунктов и это список глав, во второй более 250 это содержимое глав, мне нужно эти 250 распределить на 100 глав. Например в первую главу 3 пункта содержимого глав, во вторую 1, и таким образом разное количество в разные главы. Я не могу понять алгоритм такой обработки. У меня адаптер возвращает длину масива БД, как мне правильно распределить в нужном мне соотношении?

Дополнение:

Класс БД:

class HeadsSQLiteOpenHelper extends SQLiteOpenHelper {
private static final int mDBVersion = 1;
private static final String mDBName = "MYTESTDB";
private static final String mTableName = "TEST_TABLE";
private static final String mId = "_id";
private static final String mLINE1 = "LINE1";
private static final String mLINE2 = "LINE2";
private static final String[] myColumns = {mId, mLINE1, mLINE2};
private static final String myTable =
        "CREATE TABLE " + mTableName +
                "(" +
                mId + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                mLINE1 + " TEXT, " +
                mLINE2 + " TEXT)";
HeadsSQLiteOpenHelper(Context context) {
    super(context, mDBName, null, mDBVersion);
}
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(myTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + mTableName);
        this.onCreate(db);
}
List<Heads> getHeadsItem(){
    SQLiteDatabase db = this.getReadableDatabase();
    @SuppressLint("Recycle") Cursor cursor = db.query(mTableName, // a. table
            myColumns,
            null,
            null,
            null,
            null,
            null,
            null);
    List<Heads> headsItem = new ArrayList<>();
    if(cursor.moveToFirst()){
        while(!cursor.isAfterLast()){
            headsItem.add(new Heads(
                    cursor.getString(cursor.getColumnIndex(mLINE1)),
                    cursor.getString(cursor.getColumnIndex(mLINE2))));
            cursor.moveToNext();
        }
    }
    return headsItem;
}

Класс адаптер:

class TheHeadsAdapter extends RecyclerView.Adapter<TheHeadsAdapter.ViewHolder> {
private List<Heads> mHeads;
TheHeadsAdapter(List<Heads> headsItem) {
    this.mHeads = headsItem;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(
            R.layout.head_items, parent, false);
    return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
viewHolder.line1.setText(Html.fromHtml(mHeads.get(position).getLine1()));
viewHolder.line2.setText(Html.fromHtml(mHeads.get(position).getLine2()));
}
@Override
public int getItemCount() {
    return mHeads.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
    TextView line1, line2;
    ViewHolder(View itemView) {
        super(itemView);
        line1 = (TextView) itemView.findViewById(R.id.line1);
        line2 = (TextView) itemView.findViewById(R.id.line2);
    }
}

Таким образом, метод

public int getItemCount() {
    return mHeads.size();
}

Возвращает всю длину позиций из БД в указанный RecyclerView и это список глав где 100 позиций. Теперь задача в том, чтобы я могу в каждую из этих позиций, загружать из другого такого же адаптера нужное мне количество. Например, в 1 позицию глав 3 позиции содержания глав, во 2 - 5, в 3 - 2, и таким образом они разнятся.

Answer 1

Вам нужно создать БД определенной структуры, в которой будут 2 таблицы.

Таблица глав Title:

| _id | title |
---------------
|  1 | Глава1 |
|  2 | Глава2 |

Таблица содержимого Content:

| _id | content | id_title |
----------------------------
|  1  | контент1|   1      |
|  2  | контент2|   1      |
|  3  | контент3|   2      |
|  4  | контент4|   2      |
|  5  | контент5|   2      |

Таблица Content содержит связь один ко многим с таблицей Title через поле (столбец) id_title, в которой по ID глав устанавливается, какие главы с каким содержимым связаны.

Здесь: контент1 и 2 связаны с первой главой, контент3, 4, 5 - со второй главой.

Далее, после клика на одном из пунктов глав получаем ID этой главы и передаем его во вторую активити для вывода списка содержимого, где делаем запрос в БД к таблице Content с выборкой значений, соответствующих полю (столбцу) id_title таблицы равным полученному ID главы.

Answer 2

Есть предположение что в базе есть связи по id. Например, содержимое главы и номер той главы в которую оно пишется. Тогда читаем список глав и пишем в список со своими id. Потом читаем базу с содержимым. Берем очередное содержимое и пишем к той главе которая имеет соответствующий номер. Без каких либо связей непонятно как их соотносить. Надеюсь, что помог.

READ ALSO
Как ускорить билд в tomcat?

Как ускорить билд в tomcat?

Всем приветУ меня Java приложение(Spring(boot,data,security), Hibernate, Thymeleaf, postgresql(драйвер), HikariCP)

205
Подтянуть файл формата .p12 в программу java

Подтянуть файл формата .p12 в программу java

Есть приложение на java, есть файл filep12(пароль тоже есть) и сервер(linux без прав администратора), на котором это приложение надо развернуть

194
Skype bot добавить кнопки

Skype bot добавить кнопки

Добрый день

262