У меня есть 5 фрагментов в моей основной деятельности. Когда я выбираю ShopFragment, я проверяю, подписан ли пользователь в макете show FragmentShop. в противном случае он загружает еще один макет с именем activity_reg_log. Activity_reg_log не имеет классов. это просто макет. Я попытался показать мои логи c.
activity_reg_log имеет viewPager и tabLayout внутри. этот viewPager использует класс, который расширяет FragmentPagerAdapter. его getItem возвращает фрагмент Type и раздувает RegisterFragment () и LoginFragment (). Коды работают. но у меня проблема. Я хочу, когда пользователь нажимает текст ниже RegisterFragment, он переходит в LoginFragment. Я много читал о viewPager.setCurrentItem (). Я назвал это в RegisterFragment, а не в собственном Fragment (ShopFragment). кажется, нужно обновить пользовательский интерфейс. Я не знаю как Главная проблема в том, что.
в продолжение моего проекта, который я хочу, когда пользователь вошел в систему. Появляется ShopFragment. xml.
ShopFragment.kt
class ShopFragement : Fragment(),ReadFromShop.MyCallback{
lateinit var tl_tabLayout: TabLayout
lateinit var vp_viewPager: ViewPager
lateinit var fragments: MutableList<Fragment>
lateinit var titles: ArrayList<String>
private var toolbar: ActionBar? = null
lateinit var myfragmentmanager: FragmentManager
lateinit var shopRecycler: RecyclerView
val arraylist=ArrayList<ShopDataModel>()
// val sharepref=getSharedPreferences("Token",0)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
RegisterFragment()
var view = inflater.inflate(R.layout.fragment_shop, container, false)
val sharepref: SharedPreferences = view.context.getSharedPreferences("Token", 0)
val token: String? = sharepref.getString("usertoken", "")
if (token!!.isNotEmpty())
{
//user logged in
shopRecycler = view.findViewById<RecyclerView>(R.id.ShopRecycler)
shopRecycler.layoutManager = LinearLayoutManager(view.context)
// Inflate the layout for this fragment
val myreaddata = ReadFromShop(this)
myreaddata.getShopDetail()
}
else{
//user not logged in - show Register/Login fragment
view = inflater.inflate(R.layout.activity_reg_log, container, false)
tl_tabLayout = view.findViewById(R.id.tl_tabLayout)
vp_viewPager = view.findViewById(R.id.vp_viewPager)
vp_viewPager.setAdapter(Adapter_Viewpager_Reg_Log(getFragmentManager()))
// vp_viewPager.setCurrentItem(1,true)
}
return view
}
FragmentShop. xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Fragment.ShopFragement"
android:id="@+id/frm_shop"
>
<!-- TODO: Update blank fragment layout -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/ShopRecycler"
android:layoutDirection="rtl"
android:textDirection="rtl"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
activity_reg_log. xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tl_tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabTextColor="@color/primaryColor"
app:tabSelectedTextColor="@color/white2"
app:tabIndicatorColor="@color/colorAccent"
app:tabIndicatorHeight="10dp">
</com.google.android.material.tabs.TabLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Fragment.ShopFragement"
android:id="@+id/frm_reg_log"
>
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp_viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.viewpager.widget.ViewPager>
</FrameLayout>
</LinearLayout>
Adapter_ViewPager_Reg_Log.kt
class Adapter_Viewpager_Reg_Log(val fm: FragmentManager?) : FragmentPagerAdapter(fm!!,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
{
override fun getItem(position: Int):Fragment {
when (position) {
0 -> return RegisterFragment() //ChildFragment1 at position 0
1 -> return LoginFragment() //ChildFragment2 at position 1
}
return RegisterFragment() //does not happen
}
override fun getCount(): Int {
return 2 // 2 fragments
}
}
Это мой RegisterFragment. Я вызвал setOnClickListener для Textview и вызвал viewPager.setItem (). но это не работает или refre sh UI.
class RegisterFragment() : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view= inflater.inflate(R.layout.fragment_register, container, false)
var ETname=view.findViewById<EditText>(R.id.ETName)
var ETnumber=view.findViewById<EditText>(R.id.ETNumber)
var ETpassword=view.findViewById<EditText>(R.id.ETPassword)
var ETemail=view.findViewById<EditText>(R.id.ETEmail)
var BTNregister=view.findViewById<Button>(R.id.BTNRegister)
var TV_Log=view.findViewById<TextView>(R.id.TV_Go_Login)
BTNregister.setOnClickListener {
if (ETname.text.isEmpty())
Toast.makeText(view.context, "Please Fill The Name", Toast.LENGTH_LONG).show()
else if (ETpassword.text.isEmpty())
Toast.makeText(
view.context,
"Please Fill The Password",
Toast.LENGTH_LONG
).show()
else {
}
}
TV_Log.setOnClickListener {
val temp=inflater.inflate(R.layout.activity_reg_log, container, false)
val vp_viewPager = temp.findViewById(R.id.vp_viewPager) as ViewPager
vp_viewPager.setCurrentItem(1,true)
Log.d("mmy","button clicked called")
}
return view
}
}