首页 > 解决方案 > 自定义 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 有问题,但我正在正确检索所有项目。我也将许多曲目放入存储中。

标签: javaandroid

解决方案


推荐阅读