android 解决java.lang.IllegalArgumentException: The key must be an application-specific resource id

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

好了,又可以愉快玩耍了。

猜你喜欢

转载自blog.csdn.net/msn465780/article/details/127950999