Android:对列表单元格使用XML布局,而不是Java代码布局(小部件)
Android:对列表单元格使用XML布局,而不是Java代码布局(小部件),java,android,Java,Android,我正在制作一个音乐应用程序,目前正在开发库功能。但是,在使用列表视图(尤其是单元格)时,我遇到了一些问题。我正试图从java中创建的每个单元格中的简单文本视图布局转变为使用XML文件进行布局的布局(从而使java文件主要保持语义) 这是我的单元格布局的原始代码: public View getView(int position, View convertView, ViewGroup parent) { String id = null; TextView tv
我正在制作一个音乐应用程序,目前正在开发库功能。但是,在使用列表视图(尤其是单元格)时,我遇到了一些问题。我正试图从java中创建的每个单元格中的简单文本视图布局转变为使用XML文件进行布局的布局(从而使java文件主要保持语义)
这是我的单元格布局的原始代码:
public View getView(int position, View convertView, ViewGroup parent) {
String id = null;
TextView tv = new TextView(mContext.getApplicationContext());
if (convertView == null) {
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
musiccursor.moveToPosition(position);
id = musiccursor.getString(music_column_index);
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
musiccursor.moveToPosition(position);
id += "\n" + musiccursor.getString(music_column_index);
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM);
musiccursor.moveToPosition(position);
id += "\n" + musiccursor.getString(music_column_index);
tv.setText(id);
} else
tv = (TextView) convertView;
return tv;
}
我的新版本:
public View getView(int position, View convertView, ViewGroup parent) {
View cellLayout = findViewById(R.id.albums_list_cell);
ImageView album_art = (ImageView) findViewById(R.id.album_cover);
TextView album_title = (TextView) findViewById(R.id.album_title);
TextView artist_title = (TextView) findViewById(R.id.artist_title);
if (convertView == null) {
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM);
musiccursor.moveToPosition(position);
album_title.setText(musiccursor.getString(music_column_index));
//music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
//musiccursor.moveToPosition(position);
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
musiccursor.moveToPosition(position);
artist_title.setText(musiccursor.getString(music_column_index));
} else{
cellLayout = (TextView) convertView;
}
return cellLayout;
}
初始化(在创建文件中完成):
以及相应的XML文件:
(主要)
(相册\u列表\u单元格)
理论上(基于我到目前为止所做的一点点安卓操作系统),这应该是可行的,但事实并非如此。Logcat在错误代码的第96行(即album_title.setText行)给出了一个空指针异常。这可能是一个问题,我的演员,但谷歌告诉我这是好的:D
谢谢你的帮助,如果你需要更多信息,请告诉我
编辑:只是要指出,本节所基于的代码来自,目前大部分代码与我的代码相同
当您想使用自定义布局来表示每个项目时,在适配器中,您需要使用LayoutFlater在getView方法中对自定义布局进行充气 因此,我将更改以下行:
View cellLayout = findViewById(R.id.albums_list_cell);
致:
您还需要将albums\u list\u cell.xml移动到layout文件夹中
然后,您还可以编辑如何检索布局中定义的相关小部件,如下所示:
ImageView album_art = (ImageView) cellLayout.findViewById(R.id.album_cover);
TextView album_title = (TextView) cellLayout.findViewById(R.id.album_title);
TextView artist_title = (TextView) cellLayout.findViewById(R.id.artist_title);
希望这有帮助 解决了上述问题…请注意以下几行上的(TextView)转换。当然,这应该是一个相对的演员阵容
} else{
cellLayout = (TextView) convertView;
}
这工作得很好(现在只是为了研究这个布局充气机的东西:D)。非常感谢!
View cellLayout = findViewById(R.id.albums_list_cell);
View cellLayout = LayoutInflater.from(mContext).inflate(R.layout.albums_list_cell,null);
ImageView album_art = (ImageView) cellLayout.findViewById(R.id.album_cover);
TextView album_title = (TextView) cellLayout.findViewById(R.id.album_title);
TextView artist_title = (TextView) cellLayout.findViewById(R.id.artist_title);
} else{
cellLayout = (TextView) convertView;
}