2017-02-12 2 views
0

Как создать приложение с несколькими строками с одинаковыми данными для каждой строки. Вот как выглядят все строки. он содержит три текстовых вида и два прядильника. это приложение должно помочь рассчитать gpa студента в течение одного семестра.Как создать операцию с несколькими строками

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.mbedobe.android.samplegpacalculator.app.MainActivity"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="C1" 
    android:id="@+id/course_textView"/> 



<Spinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/spinner" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/course_textView" 
    android:layout_toEndOf="@+id/course_textView" 
    android:layout_marginLeft="23dp" 
    android:layout_marginStart="23dp" /> 

<Spinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/spinner2" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/spinner" 
    android:layout_toEndOf="@+id/spinner" 
    android:layout_marginLeft="23dp" 
    android:layout_marginStart="23dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="0" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/spinner2" 
    android:layout_toEndOf="@+id/spinner2" 
    android:id="@+id/gradePoints" 
    android:layout_marginLeft="23dp" 
    android:layout_marginStart="23dp"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="0" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/gradePoints" 
    android:layout_toEndOf="@+id/gradePoints" 
    android:id="@+id/gradeValue" 
    android:layout_marginLeft="23dp" 
    android:layout_marginStart="23dp"/> 

</RelativeLayout> 
+0

Посмотрите ListView или RecyclerView. –

+0

Вы ищете ['ListView'] (https://developer.android.com/guide/topics/ui/layout/listview.html) с настраиваемым элементом списка –

ответ

1

Вы должны подумать об использовании ListView with BaseAdapter.

+0

после использования вида списка с базовым адаптером, я получил пустой экран –

+0

вид списка с базовым адаптером работал просто отлично. –

1

Используйте RecyclerView с custom adapter. В этом случае макет выше будет строкой строки для каждой строки.

Используйте приведенные выше ссылки, чтобы понять, как создавать собственные пользовательские адаптеры RecyclerView с настраиваемыми макетами.

EDIT:

Хорошо, я дам вам основы здесь. Для пользовательского RecyclerView есть три основные вещи.

Они:

  1. Список объектов (ваши данные)
  2. Пользовательский макет для каждой строки
  3. адаптер, который преобразует ваши данные на выше макете.

Теперь давайте возьмем пример и попытаемся объяснить это.

Вы должны были видеть популярные приложения, такие как Gmail, WhatsApp и т.д. При открытии этих приложений, вы увидите список писем/чатов и т.д. Одна вещь, чтобы заметить, что расположение для каждой строки такой же, даже хотя содержание внутри них отличается.

Это говорит нам о двух вещах: во-первых, данные должны быть списком одного и того же объекта, а во-вторых, расположение каждой строки одинаково. Итак, чтобы создать такой listView или RecyclerView, нам не нужно создавать столько макетов, сколько строк. Один макет можно использовать повторно для каждой строки.

Итак, понимаются две наши потребности. Конечным элементом является адаптер. Адаптер - это то, что принимает ваш список и преобразует каждый элемент из списка в строку в вашем RecyclerView. Эти строки автоматически создаются адаптером, когда пользователь прокручивает список и удаляется, когда пользователь больше не может видеть эти строки.

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

+0

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

+0

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

+0

@ K.D.MBEDOBE см. Мое редактирование. – Rachit

0

Либо использовать ListView, recyclerView или динамически добавлять элементы в scrollview.

Использование ListView или RecyclerView будет лучшим подходом для вас.

Я дам вам последний вариант, который должен работать от java только в том случае, если вы хорошо разбираетесь в java. (Только шаги не полный код)

1) your xml file should contain scroll view. 
2) for each item to be added (3 textview 2 spinner), add a layout and provide layout params for it i.e width/height/orientation/background etc. 
3)add this layout to the scrollview you created in xml by 
findViewById(R.id.scrollviewId).add(layout) 
4)create your textviews/spinners in and give them layout params.{ this process is much logical in a pattern of your design so must be very careful} 
5)add all these textviews/spinners in the layout you created in step 3. 

Примечание: в соответствии с вашими требованиями к дизайну, вам может понадобиться добавить другие раскладки между макет, созданный на шаге 2/3 и других элементов, созданных в шаге 4.

Здесь пока код Вам полюбились:

LinearLayout myLayout = (LinearLayout)findViewById(R.id.layout_in_xml); 
for(int i = 0; i < required_fields.length; i++){ 

LinearLayout lr = new RelativeLayout(DisplaySadip.this); 
    LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
lr.serLayoutParams(layoutParams); 
lr.setOrientation(LinearLayout.HORIZONTAL); 
//add linear layout to your layout in xml 
myLayout.add(lr); 
//add textview, spinner to this layout now 
TextView tv1 = new TextView(YourActivity.this) 
tv1.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
tv1.setText("......"+i); 
lr1.add(tv1) 

Spinner spinner1 = new Spinner(YourActivity.this) 
spinner.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

Spinner spinner2 = new Spinner(YourActivity.this) 
spinner.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

lr.add(spinner1); 
lr.add(spinner2); 
TextView tv2 = new TextView(YourActivity.this) 
    tv2.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
    tv2.setText("......"+i); 
    lr.add(tv2) 
TextView tv3 = new TextView(YourActivity.this) 
    tv3.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
    tv3.setText("......"+i); 
    lr1.add(tv3) 
} 

он должен добавить добавить много нет просмотров вы хотите в макете.

+0

все еще новичок в java, поэтому любая помощь оценивается –

+0

Опубликовать требуемое изображение макета –

+0

xml-файл - это ожидаемый макет для каждой строки. приложение будет иметь максимум 8 строк. –