我在我正在玩的应用中遇到资源未找到问题,视图中存在id,并且正在使用正确的视图。我删除了R文件并重新生成但没有帮助。它编译并显示资源被找到但在运行时它在尝试在textview中设置文本时出错。希望有人可以指出造成这种情况的原因。
以下是适配器代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
SongHolder songHolder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)mContext).getLayoutInflater();
row = inflater.inflate(mLayoutResourceId, parent, false);
songHolder = new SongHolder();
songHolder.txtSongId = (TextView)row.findViewById(R.id.songid);
songHolder.txtName = (TextView)row.findViewById(R.id.name);
songHolder.txtArtist = (TextView)row.findViewById(R.id.artist);
songHolder.txtAlbum = (TextView)row.findViewById(R.id.album);
songHolder.txtNotes = (TextView)row.findViewById(R.id.notes);
row.setTag(songHolder);
}
else
{
songHolder = (SongHolder)row.getTag();
}
ClassSong song = mSongs.get(position);
//###############THE FOLLOWING LINE IS WHERE THE ERROR OCCURS###############
songHolder.txtSongId.setText(song.getSongID());
songHolder.txtName.setText(song.getName());
songHolder.txtArtist.setText(song.getArtist());
songHolder.txtAlbum.setText(song.getAlbum());
songHolder.txtNotes.setText(song.getNotes());
if(song.getAlbum() == "" || song.getAlbum() == null)
songHolder.txtAlbum.setVisibility(View.GONE);
else
songHolder.txtAlbum.setVisibility(View.VISIBLE);
if(song.getNotes() == "" || song.getNotes() == null)
songHolder.txtNotes.setVisibility(View.GONE);
else
songHolder.txtNotes.setVisibility(View.VISIBLE);
return row;
}
视图的xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gat"
android:padding="0dip">
<LinearLayout android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:textColor="#FFFFFF"
android:textSize="18sp"/>
<TextView android:id="@+id/songid"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:visibility="gone"
android:textColor="#FFFFFF"
android:textSize="18sp"/>
<TextView android:id="@+id/artist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:textColor="#517789"
android:textSize="15sp"/>
<TextView android:id="@+id/album"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:textColor="#517789"
android:textSize="12sp"/>
</LinearLayout>
<LinearLayout android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/notes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="#517789"
android:textSize="12sp"/>
</LinearLayout>
</LinearLayout>
以及调用适配器的list活动中的代码:
private void fillData() {
ClassSong song = new ClassSong(this);
ClassSongListAdapter adapter = new ClassSongListAdapter(this, R.layout.song_row, song.getAllSongs(this));
setListAdapter(adapter);
}
此外,当在持有者中拾取视图时,它被找到并且具有明显不为空的值。所以看起来在添加到视图持有者时会找到textview,但是当我尝试为其设置值时却没有找到它,如果我注释掉了songid行,则其他任务工作正常。有人有什么想法吗?
感谢。
答案 0 :(得分:2)
我认为,歌曲ID是一个整数:然后将其转换为字符串,你会没事的:
songHolder.txtSongId.setText(song.getSongID()+"");
说明:有两个setText()
方法,一个期望String
参数,用于直接设置文本,另一个,期望int
参数实际上期望资源ID像R.string.app_name
如果您的歌曲ID是一个整数,您会意外地调用期望资源ID的更高版本,因此会出错。