Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:对列表单元格使用XML布局,而不是Java代码布局(小部件)_Java_Android - Fatal编程技术网

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;
}