Где я должен вызвать android ViewPager.setItem () для просмотра кнопкой, находящейся в другом фрагменте? - PullRequest
0 голосов
/ 27 марта 2020

У меня есть 5 фрагментов в моей основной деятельности. Когда я выбираю ShopFragment, я проверяю, подписан ли пользователь в макете show FragmentShop. в противном случае он загружает еще один макет с именем activity_reg_log. Activity_reg_log не имеет классов. это просто макет. Я попытался показать мои логи c.

enter image description here

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
        }

    }
...