2022-11-20 16:31:23.832 20933-20933/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 20933
java.lang.IllegalArgumentException: The key must be an application-specific resource id.
at android.view.View.setTag(View.java:25889)
at com.example.myapplication.adapter.VideoListAdapter.initVlcPlayer(VideoListAdapter.java:143)
at com.example.myapplication.adapter.VideoListAdapter.onBindViewHolder(VideoListAdapter.java:92)
at com.example.myapplication.adapter.VideoListAdapter.onBindViewHolder(VideoListAdapter.java:32)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at com.example.myapplication.adapter.VideoListAdapter.onBindViewHolder(VideoListAdapter.java:98)
at com.example.myapplication.adapter.VideoListAdapter.onBindViewHolder(VideoListAdapter.java:32)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
at androidx.recyclerview.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:561)
在view中设置tag,有2种方法,
public void setTag(final Object tag)
public void setTag(int key, final Object tag)
这里用到了根据key设置tag,直接用的整数,就如上所述异常;
看提示,很明显了,说不能直接用整数作为key,要使用资源id,这是为了保证此整数的唯一性;
解决方案也很简单,在资源中添加ids.xml文件,添加上自命名的id:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="id_libvlc" type="id"/>
<item name="id_mediaplayer" type="id"/>
</resources>
再set get tag 就解决了:
videoLayout.setTag(R.id.id_libvlc, LibVLC);
videoLayout.setTag(R.id.id_mediaplayer, mediaPlayer);
LibVLC libVLC = (LibVLC) holder.vlcVideoLayout.getTag(R.id.id_libvlc);
MediaPlayer mediaPlayer = (MediaPlayer) holder.vlcVideoLayout.getTag(R.id.id_mediaplayer);
好了,又可以愉快玩耍了。