質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

解決済

プログレスバーの表示非表示を切り替えたい

j.f15
j.f15

総合スコア0

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

1回答

0評価

0クリップ

817閲覧

投稿2021/02/15 09:40

前提・実現したいこと

ログインボタン押下時に
fragmentからactivity_layoutに配置されているプログレスバーの表示非表示を切り替えたい。
表示非表示の切り替えはvisibilityで実装したいです。

発生している問題・エラーメッセージ

id.visibility = View.VISIBLEのような記述をしても変化しない。

該当のソースコード

・LoginActivity

kotlin

class LoginActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) val actionBar: androidx.appcompat.app.ActionBar? = supportActionBar getSupportActionBar()?.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); getSupportActionBar()?.setCustomView(R.layout.login_header); actionBar?.setDisplayHomeAsUpEnabled(true) val loginFragment = LoginFragment() val fragmentTransaction = supportFragmentManager.beginTransaction() fragmentTransaction.add(R.id.login_fragment_container, loginFragment) fragmentTransaction.commit() } }

・LoginFragment

kotlin

class LoginFragment : Fragment() { private lateinit var login_binding: FragmentLoginBinding private var _binding: ActivityLoginBinding? = null private val activity_binding get() = _binding!! private val viewModel: LoginViewModel by lazy { ViewModelProviders.of(this).get(LoginViewModel::class.java) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = ActivityLoginBinding.inflate(inflater, container, false) login_binding = DataBindingUtil.inflate(inflater, R.layout.fragment_login, container, false) login_binding.lifecycleOwner = viewLifecycleOwner login_binding.viewModel = viewModel return login_binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) //パスワードリセット画面遷移ボタン login_binding.pwdForgetBtn.setOnClickListener{ val pwdResetBeforeFragment = PwdResetBeforeFragment() Log.d("!ResetBefore!", "" + pwdResetBeforeFragment) val fragmentTransaction = fragmentManager?.beginTransaction() fragmentTransaction?.addToBackStack(null) fragmentTransaction?.replace(R.id.login_fragment_container, pwdResetBeforeFragment) fragmentTransaction?.commit() } //新規登録画面遷移ボタン login_binding.memberRegistrationBtn.setOnClickListener{ val memberRegistrationFragment1 = MemberRegistrationFragment1() val fragmentTransaction = fragmentManager?.beginTransaction() fragmentTransaction?.addToBackStack(null) fragmentTransaction?.replace(R.id.login_fragment_container, memberRegistrationFragment1) fragmentTransaction?.commit() } //------ログインボタン押下時にactivity_loginのプログレスバーのvisibilityを切り替えたい------\\ //ログイン処理 login_binding.loginBtn.setOnClickListener { activity_binding.loginProgressbarLayout.visibility = View.VISIBLE var user_token = viewModel.sendJsonData() Log.d("トークン", ""+user_token) } } }

・activity_login

kotlin

<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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" tools:context=".login.LoginActivity"> <RelativeLayout android:id="@+id/login_fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <RelativeLayout android:id="@+id/login_progressbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:translationZ="100dp" android:background="@color/progress_background" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:indeterminate="true" android:indeterminateDrawable="@drawable/progress_bg" android:max="100" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </RelativeLayout> </RelativeLayout> </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

確認したいファイル等ありましたら教えてください。
お手数をおかけしますがご教示をお願いしたいです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hoshi-takanori
hoshi-takanori

2021/02/15 10:39 編集

LoginFragment で ActivityLoginBinding\.inflate\(\) してはいけません。 loginProgressbarLayout は LoginActivity に属しているので、loginBtn の OnClickListener では、activity as LoginActivity に対して loginProgressbarLayout の表示・非表示を切り替えるようにお願いする必要があります。 また、画面遷移も LoginActivity でやった方がいいと思います。
j.f15
j.f15

2021/02/15 10:55

回答ありがとうございます。 なるほど。プログレスバーはactivityにあるのでログインボタンのクリック処理はactivityに対して行わないといけなかったのですね。 そのことを踏まえてもう少し調べて見たいと思います。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。