【发布时间】:2022-08-07 11:57:00
【问题描述】:
我有基本的线框布局,谁描述了我的问题,因为我不知道如何用好的打字来解释。 (但我会尽可能清楚地解释我的意思,并尽可能多地解释)。
*我希望你们都能理解我的线框是什么意思:)
*如果您对此感到难以理解,请告诉我,我会做得更好,更详细。
所以从线框图来看,我有 3 个活动。
-
MainActivity,带有TabLayout,里面填充了Fragment,里面有一个RecyclerView,
-
DetailActivity,其中包含从 MainActivity 中的每个 RecyclerView Item 带来的数据,
-
WebViewActivity,这将是用户单击 DetailActivity 中的一个按钮后的最后一个活动 与之前选择的每个 RecyclerView 项目不同的上下文 用户。
从我描述的线框图中,我已经成功打开了“WebViewActivity”,并使用“Button No.2”从“DetailActivity”中根据指定的参数(google.com)加载了 URL
我的问题是:
-
用户来访时如何打开 WebViewActivity 并加载“Youtube.com” 从 \"RecyclerView Item No.2\" 通过单击 \"Button 1\" Inside of Detail 活动?。
-
用户来访时如何打开 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 - ClassWebViewActivity.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 - ClassMainTabFragment.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 - ClassMainTabModel.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