-1
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference

暗黙の意図でリンクを開こうとすると、このエラーが発生します。ImageViewのアダプタ クラスからアクティビティを呼び出してopenUrl(url: String)います。Settings.ktSettingsAdapter.ktsetOnClcikListener

SettingsAdapter.ktクラス

private val settings = Settings()
youtubeLink.setOnClickListener {
            val url = "https://www.youtube.com/watch?v=i-0FtaAadeM"
            settings.openUrl(url)
        }

Settings.ktアクティビティ

fun openUrl(url: String) {
        val intent = Intent(Intent.ACTION_VIEW,Uri.parse(url))
        startActivity(intent)
    }
4

1 に答える 1

0

あなたは間違ったアプローチに従っています。これには 2 つの方法があります。

  1. アダプタでコード スニペットを直接呼び出すことができます

      youtubeLink.setOnClickListener {
         val url = "https://www.youtube.com/watch?v=i-0FtaAadeM"
         val intent = Intent(Intent.ACTION_VIEW,Uri.parse(url))
         context.startActivity(intent)
     }
    
  2. アダプタでコールバックを作成し、アクティビティに実装できます

     private OnSettingsListener listener;
    
    void setOnSttingListener(OnSettingsListener listener){
      this.listener = listener;
    }
    
    youtubeLink.setOnClickListener {
         val url = "https://www.youtube.com/watch?v=i-0FtaAadeM"
         listener.onSettingClick(url);
     }
    
    interface OnSettingsListener {  
      void onSettingClick(String url);     
    }
    

    アクティビティで、このリスナーを実装します

     Settings implements SettingsAdapter.OnSettingsListener {
    
     @Override
     public void onSettingClick(String url) {
      openUrl(url)
    }
    }
    
于 2020-10-28T05:51:37.937 に答える