首页 > 解决方案 > 创建多列 Listview (Android Studio)

问题描述

我在 res/raw 目录中有一个名为“music.txt”的文件。它包含由“;”分隔的歌曲和作者列表,如下所示:

波西米亚狂想曲;女王

钢琴人;比利·乔尔

为奔跑而生;布鲁斯·斯普林斯汀

我想使用该文件来填充多列 ListView。目前它适用于第一列,所以它只显示歌曲的名称,我不知道如何实现第二列。我尝试将 ArrayAdapater 中的“activity_list_item”布局替换为自定义布局,这样我就可以将两个元素放在 TextViews 内的同一行上,但它似乎不起作用(它找不到我创建的布局)。

这是代码:

公共类 Main2Activity 扩展 AppCompatActivity {

ListView list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    list = findViewById(R.id.musicList);

    loadData();

}

public void loadData(){
    List<String> musicArray = new ArrayList<String>();
    String line;

    InputStream is = this.getResources().openRawResource(R.raw.music);
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));

    try {
        if (is != null) {
            while ((line = reader.readLine()) != null) {
                musicArray.add(line.split(";")[0]);
            }
        }
        is.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    String data[] = musicArray.toArray(new String[musicArray.size()]);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item, android.R.id.text1, data);
    list.setAdapter(adapter);
}

}

我的自定义线性布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context=".Main3Activity"
    android:weightSum="100">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_weight="50"
        android:text="TextView"/>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_weight="50"
        android:text="TextView"/>

</LinearLayout>

谢谢!

标签: javaandroid

解决方案


创建音乐对象:

class Music {
    String name;
    String song;

    public Music(String name, String song) {
        this.name = name;
        this.song = song;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSong() {
        return song;
    }

    public void setSong(String song) {
        this.song = song;
    }
}

更改您的列表:

ArrayList<Music> musicList = new ArrayList<>();

填写您的清单:

while ((line = reader.readLine()) != null) {
      String [] array = line.split(";");
      musicList.add(new Music(array[0],array[1]));
}

还有你的适配器:

ArrayAdapter adapter = new ArrayAdapter(this, R.layout.your_custom_layout_id, R.id.textView1, musicList) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
            TextView text1 = (TextView) view.findViewById(R.id.textView1);
            TextView text2 = (TextView) view.findViewById(R.id.textView2);

            text1.setText(musicList.get(position).getName());
            text2.setText(musicList.get(position).getSong());
            return view;
        }
    };

list.setAdapter(adapter);

推荐阅读