java - 自定义 ListView 仅显示 Cursor 中的一项
问题描述
所以我有一个自定义 ListView,我在其中显示存储中的所有曲目。问题是,它只显示一个项目。我在存储中放置了多个曲目,但它无法正常工作。我已经尝试了 stackoverflow 上列出的所有答案。我正在正确初始化光标,并且我的代码中没有错误。
我检索曲目的方法::
private void Encrypt() {
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if(cursor!= null && cursor.moveToFirst()){
int TrackTitle = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int Artist = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int Path = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
arrayList = new ArrayList<CustomListView>();CustomListViewAdapter customListViewAdapter = new CustomListViewAdapter(this, arrayList);
do{
String Tracktitle = cursor.getString(TrackTitle);
String Trackartist = cursor.getString(Artist);
String Trackpath = cursor.getString(Path);
arrayList.add(new CustomListView(R.drawable.angle, Tracktitle, Trackartist, Trackpath));
tracks.setAdapter(customListViewAdapter);
tracks.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CustomListView customListView = (CustomListView) tracks.getItemAtPosition(position);
String TrackPath = customListView.getPath();
String Track = customListView.getTrack();
String Artist = customListView.getArtist();
startActivity(new Intent(getApplicationContext(), Cue.class).putExtra("TrackPath", TrackPath).putExtra("Track", Track
).putExtra("Artist", Artist));
}
});
}while (cursor.moveToNext());
}
代码
自定义列表视图.java
public class CustomListView {
private int AlbumArtInt;
private String trackTitle;
private String artistTitle;
private String path;
public CustomListView (int AlbumArt, String track, String artist, String Path){
AlbumArtInt = AlbumArt;
trackTitle = track;
artistTitle = artist;
path = Path;
}
public int getAlbumArt() {
return AlbumArtInt;
}
public String getTrack() {
return trackTitle;
}
public String getArtist() {
return artistTitle;
}
public String getPath() {
return path;
}
}
CustomListViewAdapter.java
public class CustomListViewAdapter extends ArrayAdapter<CustomListView> {
public CustomListViewAdapter(@NonNull Context context, ArrayList<CustomListView> arrayList) {
super(context, 0, arrayList);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View itemView = convertView;
if(itemView==null){
itemView = LayoutInflater.from(getContext()).inflate(R.layout.custom_listview, parent, false);
}
CustomListView listView = getItem(position);
assert listView != null;
ImageView AlbumArt = itemView.findViewById(R.id.albumArt);
TextView Title = itemView.findViewById(R.id.track);
TextView Artist = itemView.findViewById(R.id.artist);
TextView Path = itemView.findViewById(R.id.item_path);
Path.setText(listView.getPath());
AlbumArt.setImageResource(listView.getAlbumArt());
Title.setText(listView.getTrack());
Artist.setText(listView.getArtist());
return itemView;
}
}
custom_listview.xml
<?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:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/albumArt"
android:layout_width="84dp"
android:layout_height="84dp"
android:padding="14dp"
android:src="@drawable/gradient_toolbar_3"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:layout_marginStart="86dp"
android:layout_marginTop="14dp"
android:ellipsize="marquee"
android:fontFamily="@font/proxima"
android:id="@+id/track"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="track1"
android:textColor="@color/white"
android:textSize="27sp" />
<TextView
android:layout_width="152dp"
android:layout_height="wrap_content"
android:id="@+id/artist"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:layout_marginStart="86dp"
android:ellipsize="marquee"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:layout_marginTop="46dp"
android:fontFamily="@font/product_sans"
android:text="artist"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/item_path"
android:layout_width="383dp"
android:layout_height="8dp"
android:textColor="@color/grey" />
我究竟做错了什么?
编辑; 我已经调试了代码,发现 CustomAdapter 和 CustomListViewClass 都没有问题。我认为 Cursor 有问题,但我正在正确检索所有项目。我也将许多曲目放入存储中。
解决方案
推荐阅读
- c++ - 如何自定义模板以不包含某些类型
- c++ - MEX C++ 原始数据访问
- java - 是否可以将初始化部分拆分为不同的类?
- sql - SQL - 选择半径中的所有项目
- php - Laravel 一对一多态关系
- jenkins - Bitbucket 拉取请求时的 Jenkins 声明性管道
- roslyn - 如何在 Roslyn 项目中将文档添加为另一个文档的子文档?
- amazon-web-services - 使用控制台和 CLI 时 S3 存储桶大小不同
- c++ - “if (argc < 2 || argc > 2)” 是否可以使用 2 个参数?& 在抛出“std::out_of_range”错误实例后调用终止
- sql - 按列的值对列进行排序