【问题标题】:How to open a new activity inside the Detail Activity from RecyclerView with different conditions/parameters in Kotlin如何在 Kotlin 中使用不同的条件/参数从 RecyclerView 的 Detail Activity 中打开一个新 Activity
【发布时间】:2022-08-07 11:57:00
【问题描述】:

我有基本的线框布局,谁描述了我的问题,因为我不知道如何用好的打字来解释。 (但我会尽可能清楚地解释我的意思,并尽可能多地解释)。

*我希望你们都能理解我的线框是什么意思:)

*如果您对此感到难以理解,请告诉我,我会做得更好,更详细。


所以从线框图来看,我有 3 个活动。

  1. MainActivity,带有TabLayout,里面填充了Fragment,里面有一个RecyclerView,

  2. DetailActivity,其中包含从 MainActivity 中的每个 RecyclerView Item 带来的数据,

  3. WebViewActivity,这将是用户单击 DetailActivity 中的一个按钮后的最后一个活动 与之前选择的每个 RecyclerView 项目不同的上下文 用户。

    从我描述的线框图中,我已经成功打开了“WebViewActivity”,并使用“Button No.2”从“DetailActivity”中根据指定的参数(google.com)加载了 URL

    我的问题是:

    1. 用户来访时如何打开 WebViewActivity 并加载“Youtube.com” 从 \"RecyclerView Item No.2\" 通过单击 \"Button 1\" Inside of Detail 活动?。

    2. 用户来访时如何打开 WebViewActivity 并加载“Gmail.com” 从 \"RecyclerView Item No.3\" 通过单击详细信息内部的 \"Button 1\" 活动?。

      这是我未解决的代码:

      MainActivity.kt

      class MainActivity : AppCompatActivity() {
      
      
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.activity_main)
      
      
              setUpTabs() // Setup TabLayout
      
      
          } // End - OnCreate
      
      
          // Start - TabLayout
          private fun setUpTabs() {
              val adapter = ViewPagerAdapter(supportFragmentManager)
              adapter.addFragment(MainTabFragment(), \"MainTab\")
              viewPager_tabLayout.adapter = adapter
              tabs.setupWithViewPager(viewPager_tabLayout)
          } // End - TabLayout
      
      
      } // End - Class
      

      详细活动.kt

      class DetailActivity : AppCompatActivity() {
      
          var prodBundle: Bundle? = null // Initialize getString (bundle) from MainActivity
          private var urls = arrayOfNulls<String>(3) // Initialize URL Direction
      
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.activity_single_product)
      
      
              // Start - WebView URL to WebViewActivity
              urls[0] = \"google.com\"
              urls[1] = \"youtube.com\"
              urls[2] = \"gmail.com\"
              // End - WebView URL to WebViewActivity
      
      
              initView() // Setup getString from RecyclerView Main Activity
      
      
          } // End - OnCreate
      
      
          // Start - getString from RecyclerView Main Activity
          fun initView() {
              prodBundle = intent.extras
      
              ph_titleText.text = prodBundle?.getString(\"TitleText\")
             ph_descText.text = prodBundle?.getString(\"DescText\")
              prodBundle?.getString(\"ImageURL\").let {
                  Glide.with(this).asBitmap()
                      .load(it)
                      .into(ph_urlImage)
      
                  Glide.with(this).asBitmap()
                      .load(it)
                      .centerCrop()
                      .fitCenter()
                      .placeholder(R.drawable.ph_img_none)
                      .diskCacheStrategy(DiskCacheStrategy.NONE)
                      .skipMemoryCache(true)
              }
          } //  End  - getString from RecyclerView Main Activity
      
          
          // Start - putExtra to WebViewActivity
          fun button2(view: View) {
              val i = Intent(this@DetailActivity, WebViewActivity::class.java)
              i.putExtra(\"linksWeView\", urls[0])
              startActivity(i)
          } // End - putExtra to WebViewActivity
      
      } // End - Class
      

      WebViewActivity.kt

      class WebViewActivity : AppCompatActivity() {
      
      
          private lateinit var webView: WebView // Initialize WebView
      
      
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.activity_webview)
      
      
              // Start - Assign getString URL from DetailActivity
              val intent = intent
              val webSite = intent.getStringExtra(\"linksWebView\")
              // End - Assign getString URL from DetailActivity
      
      
              // Start - WebView
              webView = findViewById(R.id.wv)
      
              webView.setWebViewClient(object : WebViewClient() {
                  override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
                      super.onPageStarted(view, url, favicon)
                      view?.visibility = View.INVISIBLE
      
                      if (Build.VERSION.SDK_INT >= 19) {
                          webView.setLayerType(View.LAYER_TYPE_HARDWARE, null)
                      } else {
                          webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
                      }
                  }
      
                  override fun onPageFinished(view: WebView?, url: String?) {
                      super.onPageFinished(view, url)
                      view?.visibility = View.VISIBLE
                  }
      
                  // Start - Fix SocialMedia Acces
                  override fun shouldOverrideUrlLoading(wv: WebView, url: String): Boolean {
                      if (url.startsWith(\"tel:\") || url.startsWith(\"whatsapp:\")) {
                          val intent = Intent(Intent.ACTION_VIEW)
                          intent.data = Uri.parse(url)
                          startActivity(intent)
                          webView.goBack()
                          return true
                      }
                      return false
                  } // End - Fix SocialMedia Acces
      
              }) // End - WebView
      
      
              // Start - WebView Setting
              if (webSite != null) {
                  webView.loadUrl(webSite)
              }
      
              val webSettings = webView.settings
              webSettings.javaScriptEnabled = true // js active
              webSettings.domStorageEnabled = true // componenet load
              webSettings.allowContentAccess = true
              webSettings.loadsImagesAutomatically = true
              webSettings.cacheMode = WebSettings.LOAD_NO_CACHE
              webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH)
              webSettings.setEnableSmoothTransition(true)
              // End - WebView Setting
      
      
      }// End - OnCreate
      
        
      } // End - Class
      

      MainTabFragment.kt

      class MainTabFragment : Fragment() {
      
      
          lateinit var maintabfragmentAdapter: MainTabFragmentAdapter  // Initialize Adapter
          private val sLM = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL) // Initialize layoutManager
          val addMainTabFragmentModelList: MutableList<MainTabFragmentModel> = ArrayList() // Initialize listModel
          private var urlMainTabFragment = arrayOfNulls<String>(2) // Initialize URL Direction WebView
      
          override fun onCreateView(
              inflater: LayoutInflater, container: ViewGroup?,
              savedInstanceState: Bundle?
          ): View? {
              return inflater.inflate(R.layout.fragment_maintab, container, false)
      
      
          }
      
      
          override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
              super.onViewCreated(view, savedInstanceState)
      
              // Start - Webview URL to WebViewActivity
              urlMainTabFragment[0] = \"https://url1.com\"
              urlMainTabFragment[1] = \"https://url2.com\"
              // End - Webview URL to WebViewActivity
      
      
              initViewMainTabFragment() // SetUp initView listModel
              actionMainTabFragment() // SetUp actionMainTabFragment
              iniRefreshListener() // SetUp swipeRefresh
      
      
          } // End - OnCreate
      
      
          // Start - intView listModel
          private fun initViewMainTabFragment() {
              rv_maintabfragment.layoutManager = sLM
              maintabfragmentAdapter = MainTabFragmentAdapter(requireActivity())
              rv_maintabfragment.adapter = maintabfragmentAdapter
      
              addMainTabFragmentModelList.add(
                  MainTabFragmentModel(\"https://url1.com/img1.jpg\", \"TitleText#01\", \"DescText#01\"))
              addMainTabFragmentModelList.add(
                 MainTabFragmentModel(\"https://url1.com/img1.jpg\", \"TitleText#02\", \"DescText#02\"))
              addMainTabFragmentModelList.add(
                  MainTabFragmentModel(\"https://url1.com/img1.jpg\", \"TitleText#03\", \"DescText#03\"))
              addMainTabFragmentModelList.add(
                  MainTabFragmentModel(\"https://url1.com/img1.jpg\", \"TitleText#04\", \"DescText#04\"))
      
              maintabfragmentAdapter.setMainTabFragment(addMainTabFragmentModelList)
          } // End - intView listModel
      
      
          // Start - putExtra to DetailActivity
          fun actionMainTabFragment() {
              maintabfragmentAdapter.setOnClickItemListenerMainTabFragment(object : OnItemClickListener {
                  override fun onItemClick(item: View, position: Int) {
                      lateinit var i: Intent
                      if (position == 0) {
                          i = Intent(context, WebViewActivity::class.java)
                          i.putExtra(\"linksWebView\", urlMainTabFragment[0])
                      } else if (position == 3) {
                          i = Intent(context, WebViewActivity::class.java)
                          i.putExtra(\"linksWebView\", urlMainTabFragment[1])
                      } else {
                          i = Intent(context, DetailActivity::class.java)
                      }
                      i.putExtra(\"TitleText\",
                          maintabfragmentAdapter.getMainTabFragment().get(position).titleTtextMainTab
                      )
                      i.putExtra(
                          \"DescText\",
                          maintabfragmentAdapter.getMainTabFragment().get(position).descTextMainTab
                      )
                      i.putExtra(
                          \"ImageURL\",
                          maintabfragmentAdapter.getMainTabFragment().get(position).imgMainTab
                      )
                      startActivity(i)
                  }
              })
          } // End - putExtra to DetailActivity
      
      
      } // End - Class
      

      MainTabModel.kt

      data class MainTabModel (var imgMainTab: String?, var titleTtextMainTab: String?, var descTextMainTab: String?)
      

      OnItemClickListener.kt

      interface OnItemClickListener {
          fun onItemClick(item: View, position:Int)
      }
      

      MianTabAdapter.kt

      class MainTabAdapter(private val context: Context) :
          RecyclerView.Adapter<MainTabAdapter.MainTabViewHolder>() {
      
          private val MainTabModel: MutableList<MainTabModel> = mutableListOf()  // Initialize listModel
          private lateinit var onSelectedListenerMainTab: OnItemClickListener // Initialize onItemListener
      
      
          override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainTabViewHolder {
              return MainTabViewHolder(
                  LayoutInflater.from(context).inflate(R.layout.item_maintab_layout, parent, false)
              )
          } // End - onCreateViewHolder
      
          
          override fun getItemCount(): Int {
              return MainTabModel.size
          }  // End - getItem
      
          
          override fun onBindViewHolder(holder: MainTabViewHolder, position: Int) {
              holder.maintabBindView(MainTabModel[position])
          } // End - onBindViewHolder
      
          
          // Start - setMainTab
          fun setMainTab(data: List<MainTabModel>) {
              MainTabModel.clear()
              MainTabModel.addAll(data)
              notifyDataSetChanged()
          } // End - setMainTab
      
          
          // Start - getMainTab
          fun getMainTab(): MutableList<MainTabModel> {
              return MainTabModel
          } // End - getMainTab
      
          
          // Start - MainTabViewHolder
          inner class MainTabViewHolder(maintabview: View) : RecyclerView.ViewHolder(maintabview) {
              val imgProdMainTab = maintabview.findViewById<ImageView>(R.id.iv_prodMainTab)
              val cvMainTab: MaterialCardView = maintabview.findViewById(R.id.cv_maintab)
              
              fun maintabBindView(MainTabModel: MainTabModel) {
                  MainTabModel.apply {
                      val image = MainTabModel.prodImgMainTab
                      image.let {
                          Glide.with(itemView.context).asBitmap()
                              .load(it)
                              .into(imgProdMainTab)
                          
                          Glide.with(itemView.context).asBitmap()
                              .load(it)
                              .centerCrop()
                              .fitCenter()
                              .placeholder(R.drawable.ph_img_none)
                              .diskCacheStrategy(DiskCacheStrategy.NONE)
                              .skipMemoryCache(true)
                              .transition(BitmapTransitionOptions.withCrossFade())
                      }
                  }
              }
              
              // Start - onClick
              init {
                  cvMainTab.setOnClickListener { onSelectedListenerMainTab.onItemClick(it, layoutPosition) }
              } // End - onClick
              
          } // End - MainTabBindViewHolder
      
      
          // Start - OnItemListener
          fun setOnClickItemListenerMainTab(onItemClickListener: OnItemClickListener) {
              this.onSelectedListenerMainTab = onItemClickListener
          } // End - OnItemListener
      
      
      } // End - Class
      

      我希望我的解释不会让你感到困惑,因为我不太确定我的问题和线框图是否能解释我的意思。 所以,希望有人帮我解决这个问题。

      非常感谢您抽出宝贵的时间来帮助我解决这个问题。 :)

      #编辑。!

      我发现这个 youtube 视频 start at 33:45 的情况相同,但是在这个视频中使用 java .. 有人可以解释一下 kotlin 版本吗?

    标签: android kotlin android-recyclerview


    【解决方案1】:

    根据视频,

    如果要在默认浏览器中打开

    在这种情况下,我们需要使用意图 告诉意图你需要一个动作视图 然后设置您的数据并开始活动

    所以它将类似于以下内容

    val intent = Intent(Intent.ACTION_VIEW)
    intent.setData(Uri.parse(my_url_here))
    startActivity(intent)
    

    只需将 my_url_here 替换为您要打开的 URL

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多