【问题标题】:Using MVP and Databinding to bind an onclick method from a fragment使用 MVP 和 Databinding 从片段中绑定 onclick 方法
【发布时间】:2020-04-14 03:22:10
【问题描述】:

我有一个活动和一个片段。我正在使用 MVP 模式。我正在尝试通过数据绑定为该片段中的按钮绑定 onClick 方法,但无济于事。

我尝试过: A) 将演示者的名称设置为演示者,即片段中演示者的名称。 B)fragmentPresenter,即活动中演示者的名称。

各自的代码sn-ps:

活动

    private HomeFragmentPresenter homeFragmentPresenter;
    private HomeFragment homeFragment;

片段演示者

    @Override
    public void handleBookTitleEditButtonPress(View view) {
        System.out.println("Pressed edit button");
        DataRepository.ChangeCurrentBookName(newTitle);
    }

片段 xml

 <data>
        <variable
            name="homeFragmentPresenter"
            type="se.hkr.fictioner.data_fragments.home_fragment.HomeFragmentPresenter" />
    </data>
   
            <ImageButton
                android:id="@+id/current_book_title_edit"
                android:layout_alignParentEnd="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_edit_black_24dp"
                android:onClick="@{homeFragmentPresenter::handleBookTitleEditButtonPress}"
                android:contentDescription="TODO" />

有没有办法以这种方式做到这一点?问题是我有 2 个按钮,我想将演示者的字段绑定到 editText.text

【问题讨论】:

    标签: android android-fragments mvp


    【解决方案1】:

    好的,错误是我忘记将实际绑定添加到片段的 onCreateView() 中。这是来自使用相同方案的不同片段的示例。

        @Override
            public View onCreateView(LayoutInflater inflater,
                                     ViewGroup container,
                                     Bundle savedInstanceState){
                View view = inflater.inflate(inflater, 
                                                R.layout.character_fragment,container,false);
                recyclerView = view.findViewById(R.id.character_recycler_view);
                recyclerView.setAdapter(adapter);
                linearLayoutManager = new LinearLayoutManager(getActivity());
                recyclerView.setLayoutManager(linearLayoutManager);
                return view;
            }
    

    新的

        @Override
            public View onCreateView(LayoutInflater inflater,
                                     ViewGroup container,
                                     Bundle savedInstanceState){
                CharacterFragmentBinding binding = DataBindingUtil.inflate(inflater, 
                                                R.layout.character_fragment,container,false);
                View view = binding.getRoot();
                binding.setPresenter(presenter);
                recyclerView = view.findViewById(R.id.character_recycler_view);
                recyclerView.setAdapter(adapter);
                linearLayoutManager = new LinearLayoutManager(getActivity());
                recyclerView.setLayoutManager(linearLayoutManager);
                return view;
            }
    

    为了繁荣,让它在这里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 2022-01-10
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多