在我的android项目中, 我正在获取arraylist中的数据列表
ArrayList<Items> item = db.getAllMenu();
但现在我想将这些数据添加到listview中, 我试过,
ListView lv=(ListView)findViewById(R.id.list_view_inside_nav);
String[] lv_arr = {};
lv_arr = (String[]) item.toArray();
lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, lv_arr));
但它给出错误。因为我试图将arratlist转换为字符串.. 任何人PLZ帮助我,如何将arraylist转换为字符串[]
这是我的一些文件...... items.java(getter和setter方法)
public class Items {
//private variables
String _name;
// Empty constructor
public Items(){
}
// constructor
public Items(String name){
this._name = name;
}
// getting name
public String getName(){
return this._name;
}
// setting name
public void setName(String name){
this._name = name;
}
}
我正在使用此代码从数据库中获取数据
public ArrayList<Items> getAllMenu() {
ArrayList<Items> passList = new ArrayList<Items>();
// Select All Query
String selectQuery = "SELECT * FROM " + CATEGOTY_TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Items menu = new Items();
menu.setName(cursor.getString(0));
// Adding category to list
passList.add(menu);
} while (cursor.moveToNext());
}
// return category list
return passList;
}
答案 0 :(得分:0)
错误。
Items
类无法转换为String
类。
您需要将每个Items
转换为String
对象。
示例:
说出你的课程项目
class Items{
public String itemName;
}
在您的代码更改中
String[] lv_arr = new String[items.size()];
for(int i=0;i<items.size();i++){
lv_arr[i]=item.get(i);
}
lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, lv_arr));
答案 1 :(得分:0)
你的问题是你正在尝试将List转换为数组,这不能通过强制转换完成,但存在方法。
最简单的方法是使用List.toArray(E [])方法将列表转换为数组。
ArrayList<Items> items = db.getAllMenu();
Items[] itemsArray = new Items[items.size()]; //Create the array to the correct size,
itemsArray = items.toArray(itemsArray); //Fill the array with the list data
//you could cast into Item[] directly but this is cleaner
在此处使用帮助:Convert ArrayList<String> to String[] array
数组必须是项目数组
然后,如果您已覆盖Item类的toString
方法,则返回您想要的String。
public class Items {
...
@Override
public String toString(){
this.getName() //Just an example ;)
}
...
}
这将像一个魅力。适配器使用此方法来获取要打印的String。
经过一些研究,您甚至不需要创建数组。 ArrayAdapter接受List,因此您只需覆盖Items.toString()
https://developer.android.com/reference/android/widget/ArrayAdapter.html
您可以在此处看到需要覆盖toString
但是引用了TextView,它将填充数组中每个对象的toString()。您可以添加自定义对象的列表或数组。覆盖对象的toString()方法,以确定将为列表中的项显示的文本。
这是使用
的构造函数ArrayAdapter(上下文上下文, int资源, 列出对象)
所以只需像这样创建你的适配器:
new ArrayAdapter<Items>(MainActivity.this,
android.R.layout.simple_list_item_1, item);
答案 2 :(得分:0)
你必须让对象的arraylist做这样的事情,这是我使用的一段代码
我的ArrayList
private ArrayList<Mediafileinfo> songList = new ArrayList<Mediafileinfo>();
在arraylist对象中添加数据。
Mediafileinfo info = new Mediafileinfo();
info.setFile_uri(Uri.parse(audioCursor.getString(audiodata)));
info.setName(audioCursor.getString(audioTitle));
info.setDuration(audioCursor.getLong(audioduration));
info.setAlbum(audioCursor.getString(audioalbum));
info.setAlbum_Art_uri(ContentUris.withAppendedId(albumArtUri, audioCursor.getLong(audioalbumid)));
songList.add(info);
使用getter和setter创建一个类
public class Mediafileinfo {
private String name,album,artist;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
}
然后像你一样调用你的arraylist适配器
Mediafileinfo mediafileinfo = (Mediafileinfo) getItem(position);
TextView textView = (TextView) view.findViewById(R.id.textView);
textView.setText(mediafileinfo.getAlbum());
和休息将是一样的 您可以像这样设置适配器中的arraylist
new CustomAdapter(this,songlist)
希望这会对你有帮助。For more info
答案 3 :(得分:0)
let listobj是要为listView设置的对象的列表,Lv是listview 使用以下代码:
LV.setAdapter(new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1 ,sensors));
如果您希望LisView的每个项目都代表一个特定的对象,则还可以使用这样的自定义适配器填充它: 首先在Java文件中定义扩展BaseAdaptor的新Java类
public class SensorAdaptor extends BaseAdapter{
private final Context context;
private final List<Sensor> sensors;
public SensorAdaptor(Context context , List<Sensor> sensors){
this.context = context;
this.sensors = sensors;
}
@Override
public int getCount() {
return sensors.size();
}
@Override
public Object getItem(int position) {
return sensors.get(position);
}
@Override
public long getItemId(int position) {
return sensors.get(position).getType();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_sensors, null);
} else {
view = convertView;
}
TextView listName = view.findViewById(R.id.txtSensorList);
listName.setText(sensors.get(position).getName());
return view;
}
}
在我的情况下,我希望listView的每个项目都代表一个Sensor对象 然后在res / layout的布局文件中定义此适配器要使用的布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/**txtSensorList**"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
然后您的活动
List<Sensor> sensors = mgr.getSensorList(Sensor.TYPE_ALL);
LV.setAdapter(new SensorAdaptor(getContext(),sensors));
注意 在我的情况下,我想显示传感器对象的列表