导航抽屉和Android数据绑定

6

很抱歉我的英语不好。我需要使用Android数据绑定来处理按钮点击。我在content_main.xml中包含了数据绑定。

    <data>
            <variable
                name="temp"
                type="skubyev.anton.navigationdrawer.DataBindingClass.MainActivityData" />
            <variable
                name="presenter"
                type="skubyev.anton.navigationdrawer.DataBindingClass.MainActivityPresenter"/>
        </data>
....
     <android.support.design.widget.FloatingActionButton
                android:onClick="@{() -> presenter.onShowData(temp)}"

但是MainActivity.java文件

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ContentMainBinding binding = DataBindingUtil.setContentView(this, R.layout.content_main);

        MainActivityPresenter mainActivityPresenter = new MainActivityPresenter(this);
        MainActivityData mainActivityData = new MainActivityData("Иди нахуй");
        binding.setTemp(mainActivityData);
        binding.setPresenter(mainActivityPresenter);

        setContentView(R.layout.activity_main);
....

 @Override
    public void showData(MainActivityData mainActivityData) {
        String textForRecognition = mainActivityData.getTextForRecognition();
        Toast.makeText(this, textForRecognition, Toast.LENGTH_SHORT).show();
    }

我希望在单击content_main中的悬浮按钮时运行showData函数,但showData函数位于MainActivity类中。因此,我理解当单击content_main.xml上的按钮时它不会被调用。我该怎么办?创建一个名为ContentActivity.java的单独类,并在其中编写showData函数。

我只想让MainActivity.java负责处理对content_main的点击。如何正确实现?

1个回答

3

在 Activity 中添加以下代码以进行数据绑定

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    MainViewmodel mainViewmodel = ViewModelProviders.of(this).get(MainViewmodel.class);
    activityMainBinding.setHandlers(handlers);
    activityMainBinding.setViewmodel(mainViewmodel);



    Toolbar toolbar = findViewById(R.id.toolbar);
    toolbar.setTitle("HOME");

    DrawerLayout drawer = activityMainBinding.drawerLayout;
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = activityMainBinding.navView;
    NavHeaderMainBinding navHeaderMainBinding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.nav_header_main, activityMainBinding.navView, true);
    navHeaderMainBinding.navEmail.setText(session.getFacilityEmail());
    navHeaderMainBinding.navName.setText(session.getFacilityname());
    navigationView.setNavigationItemSelectedListener(this);



}

在 nav_header_main.xml 中,你需要像这样:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<data>

    <variable
        name="navigationheader"
        type="com.nudge.gurukul.view.activities.MainActivity" />

    <import type="android.view.View" />
</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="@dimen/nav_header_height"
    android:background="@drawable/side_nav_bar"
    android:gravity="bottom"
    android:orientation="vertical"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/nav_header_desc"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        app:srcCompat="@mipmap/app_logo_round" />

    <TextView
        android:id="@+id/nav_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <TextView
        android:id="@+id/nav_email"

        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

这应该符合您的期望,您可以将文本和图像绑定到导航抽屉中。


如果您正在使用 Toolbar toolbar = findViewById(R.id.toolbar);,数据绑定的用途是什么? - AZIM MOHAMAD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接