Android:ListView在一行中包含所有值

Posted

技术标签:

【中文标题】Android:ListView在一行中包含所有值【英文标题】:Android: ListView Contains All Values in One Line 【发布时间】:2020-08-05 22:23:18 【问题描述】:

我在使用 ListView 显示值时遇到问题。 我为 listview 创建了适配器扩展了 Base Adapter 和 Setter & Getter,但是它存储 一行中的所有值。

这是显示画面

我想这样显示

这是我的适配器类

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);
    
 

如果您有任何建议,我想听听。

【问题讨论】:

确保在项目布局中使用 wrap_content 作为高度 【参考方案1】:

问题是您只有一个标题作为标题字符串。 getTitle_database_mon 返回result.toString()。如果您想要多行,您需要在列表中有多个对象,并且每个对象都有唯一的标题。所以不是一个TimeTable_ListItems。您需要改用ArrayList&lt;TimeTable_ListItems&gt; 并让每个条目都包含一个标题,这样它将在列表中创建多行而不是一个。

【讨论】:

以上是关于Android:ListView在一行中包含所有值的主要内容,如果未能解决你的问题,请参考以下文章

如何在一行中包含所有最大值?

Android 通知:如何在顶行中包含额外的文本

在一行中包含所有功能的 module.exports

在 listview 类方法中包含业务逻辑的位置

给定大小为 26 * 7 的图像是不是有可能在 Mat 的每一行中包含 78 个单独的颜色值,而另一个可以包含 77?

Flutter中包含GridViews和ListViews的ListView