Как использовать фрагмент с ViewBinding? - PullRequest
2 голосов
/ 02 марта 2020

Я хочу создать фрагмент с ViewBinding, но мой код не работает. Я прочитал документация ViewBinding , но мой фрагмент не отображается. Это мой код:

frag_player. xml

<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Test fragment"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

layout_main. xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<fragment
    android:id="@+id/fragment_player"
    class="com.test.plo.view.PlayerFragment"
    android:name="com.test.plo.view.PlayerFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

</LinearLayout>

PlayerFragment. java

 public class PlayerFragment extends Fragment {

   private FragmentPlayerBinding fragmentPlayerBinding;

   @Nullable
   @Override
   public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

       fragmentPlayerBinding = FragmentPlayerBinding.inflate(inflater, container, false);
       View view = fragmentPlayerBinding.getRoot();
       return view;
   }

  @Override
  public void onDestroyView() {
      super.onDestroyView();
      fragmentPlayerBinding = null;
  }

}

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Используйте контейнер для фрагментов. Измените свой макет

<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"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

И в MainActivity установите в контейнер.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportFragmentManager().beginTransaction()
                     .add(R.id.container, new PlayerFragment())
                     .commit();
    }
}
0 голосов
/ 02 марта 2020

@ ch65 Существуют различные способы привязки данных в представлении с использованием привязки представления. Вот пример, вы можете достичь этого

 class AddedFragment :Fragment(){

    private var fragmentAddedBinding:FragmentAddedBinding?=null

    companion object{
        fun newInstance():AddedFragment{
            return  AddedFragment();
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        fragmentAddedBinding= FragmentAddedBinding.inflate(inflater, container, false)
        val view = fragmentAddedBinding?.root
        return view
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        fragmentAddedBinding?.textMessage?.text="Apple"
    }

    override fun onDestroy() {
        super.onDestroy()
        fragmentAddedBinding=null
    }
}
...