Java 创建多列列表视图(Android Studio)
我在res/raw目录中有一个名为“music.txt”的文件。它包含以“;”分隔的歌曲和作者列表,如下所示: 波西米亚狂想曲;女王 钢琴手;比利·乔尔 生来就是为了跑步;布鲁斯·斯普林斯汀Java 创建多列列表视图(Android Studio),java,android,Java,Android,我在res/raw目录中有一个名为“music.txt”的文件。它包含以“;”分隔的歌曲和作者列表,如下所示: 波西米亚狂想曲;女王 钢琴手;比利·乔尔 生来就是为了跑步;布鲁斯·斯普林斯汀 我想使用该文件填充多列ListView。目前它与第一列一起工作,所以它只显示歌曲的名称,我不知道如何实现第二列。我尝试将ArrayAdapter中的“activity\u list\u item”布局替换为自定义布局,这样我就可以在TextView中的同一行上放置两个元素,但它似乎不起作用(它找不到我创建的
我想使用该文件填充多列ListView。目前它与第一列一起工作,所以它只显示歌曲的名称,我不知道如何实现第二列。我尝试将ArrayAdapter中的“activity\u list\u item”布局替换为自定义布局,这样我就可以在TextView中的同一行上放置两个元素,但它似乎不起作用(它找不到我创建的布局) 代码如下: 公共类Main2活动扩展了AppCompative活动{
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);
}
ListView列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
列表=findViewById(R.id.musicList);
loadData();
}
公共void loadData(){
List musicArray=new ArrayList();
弦线;
InputStream is=this.getResources().openRawResource(R.raw.music);
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is));
试一试{
如果(is!=null){
而((line=reader.readLine())!=null){
musicArray.add(line.split(“;”)[0]);
}
}
is.close();
}捕获(IOE异常){
e、 printStackTrace();
}
字符串数据[]=musicArray.toArray(新字符串[musicArray.size()]);
ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.activity\u list\u项目,android.R.id.text1,数据);
list.setAdapter(适配器);
}
}
我的自定义线性布局:
<?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>
谢谢 您可能可以将
RecyclerView
与GridLayoutManager
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 4); // change number of columns as you want
layoutManager.setOrientation(RecyclerView.HORIZONTAL);
recyclerView.setLayoutManager(layoutManager);
您是对的,您需要定义自己的列表项布局。这将通过
R.
而不是android.R.
在您的课堂上访问
您还需要通过扩展ArrayAdapter
类来定义自己的适配器。在这个新适配器中,您将定义如何分割字符串,并在自定义布局中的两个不同的TextView
视图中显示它们。创建音乐对象:
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);
“它找不到我创建的布局”-尝试清理和重建项目(在“构建”菜单下),如果不起作用,请取消缓存/重新启动(在“文件”下)。在最近的Android版本中,新创建的布局有一个小问题。谢谢,但不起作用。以防万一我做错了什么:我在res/layout中创建了布局作为布局资源文件。看起来是个显而易见的地方,但也许不是,这就是这种布局应该在的地方吗?是的,就是这样。它会和你正在使用的其他布局放在同一个地方;e、 例如,
R.layout.activity\u main2
。首先,您的列表只包含歌手的姓名。创建一个对象并相应地填写列表。然后按照这个。或者我的想法是你应该使用自定义适配器。你说的“它找不到我创建的布局”是什么意思?到底发生了什么?它不工作,它显示为红色,并告诉我创建参数和变量。