Android: ListView содержит все значения в одной строке - PullRequest
0 голосов
/ 22 апреля 2020

У меня проблема с отображением значений с помощью ListView. Я создал адаптер, расширяющий Базовый адаптер и Setter & Getter для просмотра списка, однако он сохраняет все значения в одной строке.

Это отображаемый экран

cap1

Я бы хотел отобразить вот так

enter image description here

Это мой адаптер класс

public class DataShow_List_Adapter extends BaseAdapter {

private LayoutInflater layoutInflater;
private ArrayList<TimeTable_ListItems>  timeTable_listItems;

public DataShow_List_Adapter(Context context){
    this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public void SetTimeTable_listItems_adapter(ArrayList<TimeTable_ListItems> timeTable_listItems){
    this.timeTable_listItems = timeTable_listItems;
}

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

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

@Override
public long getItemId(int position) {
    return timeTable_listItems.get(position).getId();
}

@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    convertView = layoutInflater.inflate(R.layout.timetable_datashow_listview_row,parent,false);
    ((TextView)convertView.findViewById(R.id.Title_List)).setText(timeTable_listItems.get(position).getTitle());
    ((TextView)convertView.findViewById(R.id.SubTitle_List)).setText(timeTable_listItems.get(position).getSubTitle());
    ((TextView)convertView.findViewById(R.id.Start_Time_List)).setText(timeTable_listItems.get(position).getStart_Time());
    ((TextView)convertView.findViewById(R.id.End_Time_List)).setText(timeTable_listItems.get(position).getEnd_time());

    return convertView;
    }
}

Это Setter & Getter

public class TimeTable_ListItems {
private long id;
private String title;
private String subTitle;
private String start_Time;
private String end_time;

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getSubTitle() {
    return subTitle;
}

public void setSubTitle(String subTitle) {
    this.subTitle = subTitle;
}

public String getStart_Time() {
    return start_Time;
}

public void setStart_Time(String start_Time) {
    this.start_Time = start_Time;
}

public String getEnd_time() {
    return end_time;
}

public void setEnd_time(String end_time) {
    this.end_time = end_time;
     }
 }

Этот метод возвращает строку из базы данных

public String getTitle_database_mon(){
    sqLiteDatabase = this.getReadableDatabase();
    String[] columns = new String[]{COLUMN_TITLE, COLUMN_MON,};
    @SuppressLint("Recycle")
    Cursor cursor =
            sqLiteDatabase.query(TABLE_TIMETABLE,columns,COLUMN_MON + "=" + 1 ,null,null,null,null);

    int iTitle = cursor.getColumnIndex(COLUMN_TITLE);

    StringBuilder result = new StringBuilder();

    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
        result.append(cursor.getString(iTitle)).
                append("\n\n");
    }
    return result.toString();
}

Это мой фрагмент

public class Monday_DataShow_Fragment extends Fragment {

private View root;
private ListView listView_mon;
private  ArrayList<TimeTable_ListItems> timeTable_listItems_array;
private TimeTable_ListItems timeTable_listItems;
private DatabaseTimetable databaseTimetable;
private DataShow_List_Adapter dataShow_list_adapter;

public Monday_DataShow_Fragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    root = inflater.inflate(R.layout.fragment_monday__data_show_, container, false);

    findViews();
    databaseTimetable = new DatabaseTimetable(getActivity());
    timeTable_listItems = new TimeTable_ListItems();
    dataShow_list_adapter = new DataShow_List_Adapter(requireActivity());

    setListItems();

    timeTable_listItems_array.add(timeTable_listItems);
    dataShow_list_adapter.SetTimeTable_listItems_adapter(timeTable_listItems_array);
    listView_mon.setAdapter(dataShow_list_adapter);

    // Inflate the layout for this fragment
    return root;
}

private void setListItems(){
    timeTable_listItems_array = new ArrayList<>();
    timeTable_listItems.setTitle(databaseTimetable.getTitle_database_mon());
    dataShow_list_adapter.notifyDataSetChanged();
}

private void findViews(){
    listView_mon = root.findViewById(R.id.listview_monday);
    }
 }

Если у вас есть предложения, я бы хотел их услышать.

1 Ответ

1 голос
/ 22 апреля 2020

Проблема в том, что у вас есть только один заголовок в качестве заголовка String. getTitle_database_mon возвращает result.toString(). Если вы хотите иметь несколько строк, вам нужно иметь несколько объектов в списке и уникальные заголовки для каждого. Так что вместо одного TimeTable_ListItems. Вместо этого вам нужно использовать ArrayList<TimeTable_ListItems>, и каждая запись должна содержать заголовок, поэтому он собирается создать несколько строк в списке вместо одной.

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