前提・実現したいこと
ログインボタン押下時に
fragmentからactivity_layoutに配置されているプログレスバーの表示非表示を切り替えたい。
表示非表示の切り替えはvisibilityで実装したいです。
発生している問題・エラーメッセージ
id.visibility = View.VISIBLEのような記述をしても変化しない。
該当のソースコード
・LoginActivity
kotlin
1class LoginActivity : AppCompatActivity() { 2 3 override fun onCreate(savedInstanceState: Bundle?) { 4 super.onCreate(savedInstanceState) 5 setContentView(R.layout.activity_login) 6 7 val actionBar: androidx.appcompat.app.ActionBar? = supportActionBar 8 getSupportActionBar()?.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 9 getSupportActionBar()?.setCustomView(R.layout.login_header); 10 actionBar?.setDisplayHomeAsUpEnabled(true) 11 12 val loginFragment = LoginFragment() 13 val fragmentTransaction = supportFragmentManager.beginTransaction() 14 fragmentTransaction.add(R.id.login_fragment_container, loginFragment) 15 fragmentTransaction.commit() 16 } 17}
・LoginFragment
kotlin
1class LoginFragment : Fragment() { 2 3 private lateinit var login_binding: FragmentLoginBinding 4 private var _binding: ActivityLoginBinding? = null 5 private val activity_binding get() = _binding!! 6 7 private val viewModel: LoginViewModel by lazy { 8 ViewModelProviders.of(this).get(LoginViewModel::class.java) 9 } 10 11 override fun onCreateView( 12 inflater: LayoutInflater, container: ViewGroup?, 13 savedInstanceState: Bundle? 14 ): View? { 15 16 _binding = ActivityLoginBinding.inflate(inflater, container, false) 17 18 login_binding = DataBindingUtil.inflate(inflater, R.layout.fragment_login, container, false) 19 login_binding.lifecycleOwner = viewLifecycleOwner 20 login_binding.viewModel = viewModel 21 22 return login_binding.root 23 } 24 25 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 26 super.onViewCreated(view, savedInstanceState) 27 28 //パスワードリセット画面遷移ボタン 29 login_binding.pwdForgetBtn.setOnClickListener{ 30 val pwdResetBeforeFragment = PwdResetBeforeFragment() 31 Log.d("!ResetBefore!", "" + pwdResetBeforeFragment) 32 val fragmentTransaction = fragmentManager?.beginTransaction() 33 fragmentTransaction?.addToBackStack(null) 34 fragmentTransaction?.replace(R.id.login_fragment_container, pwdResetBeforeFragment) 35 fragmentTransaction?.commit() 36 } 37 38 //新規登録画面遷移ボタン 39 login_binding.memberRegistrationBtn.setOnClickListener{ 40 val memberRegistrationFragment1 = MemberRegistrationFragment1() 41 val fragmentTransaction = fragmentManager?.beginTransaction() 42 fragmentTransaction?.addToBackStack(null) 43 fragmentTransaction?.replace(R.id.login_fragment_container, memberRegistrationFragment1) 44 fragmentTransaction?.commit() 45 } 46 47 //------ログインボタン押下時にactivity_loginのプログレスバーのvisibilityを切り替えたい------\ 48 //ログイン処理 49 login_binding.loginBtn.setOnClickListener { 50 activity_binding.loginProgressbarLayout.visibility = View.VISIBLE 51 var user_token = viewModel.sendJsonData() 52 Log.d("トークン", ""+user_token) 53 } 54 } 55}
・activity_login
kotlin
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".login.LoginActivity"> 9 10 <RelativeLayout 11 android:id="@+id/login_fragment_container" 12 android:layout_width="match_parent" 13 android:layout_height="match_parent" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintEnd_toEndOf="parent" 16 app:layout_constraintStart_toStartOf="parent" 17 app:layout_constraintTop_toTopOf="parent"> 18 19 <RelativeLayout 20 android:id="@+id/login_progressbar_layout" 21 android:layout_width="match_parent" 22 android:layout_height="match_parent" 23 android:translationZ="100dp" 24 android:background="@color/progress_background" 25 android:visibility="invisible" 26 app:layout_constraintBottom_toBottomOf="parent" 27 app:layout_constraintEnd_toEndOf="parent" 28 app:layout_constraintStart_toStartOf="parent" 29 app:layout_constraintTop_toTopOf="parent"> 30 31 <ProgressBar 32 android:id="@+id/progressBar" 33 style="?android:attr/progressBarStyleLarge" 34 android:layout_width="wrap_content" 35 android:layout_height="wrap_content" 36 android:layout_gravity="center_horizontal" 37 android:indeterminate="true" 38 android:indeterminateDrawable="@drawable/progress_bg" 39 android:max="100" 40 app:layout_constraintBottom_toBottomOf="parent" 41 app:layout_constraintEnd_toEndOf="parent" 42 app:layout_constraintStart_toStartOf="parent" 43 app:layout_constraintTop_toTopOf="parent" /> 44 45 </RelativeLayout> 46 47 </RelativeLayout> 48 49</androidx.constraintlayout.widget.ConstraintLayout>
※プログレスバーの背景を薄暗くしたいためvisibilityの機能自体は
プログレスバーの一つ上のRelativeLayoutで行っています。
試したこと
fragment_login_xml(LoginFragmentのlayout)でvisibilityの機能を使ったときは上手く表示非表示が出来たのですが、
新規登録やパスワードリセットの時にもプログレスバーを使う事を考えるとactivity_layoutで表示非表示の機能を作るのが良いと考え実装に取り掛かりました。
そこで下記のような記述をしエラー等は無かったのですが処理が走りませんでした。
(恐らくエラーは無いが取得自体が出来ていない?)
private var _binding: ActivityLoginBinding? = null private val activity_binding get() = _binding!! activity_binding.loginProgressbarLayout.visibility = View.VISIBLE
確認したいファイル等ありましたら教えてください。
お手数をおかけしますがご教示をお願いしたいです。
回答1件
あなたの回答
tips
プレビュー