【问题标题】:Navigation Drawer and android data bindingNavigation Drawer 和 android 数据绑定
【发布时间】:2017-03-08 13:00:57
【问题描述】:

对不起我的英语。我需要使用 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();
    }

我希望函数 showData 运行,然后单击 content_main 中的 FloatingActionButton。但是 showData - MainActivity 类中的函数。因此,据我了解,当您单击 content_main.xml 上的按钮时,不会调用它。我该怎么办?使用函数 showData 创建一个单独的类 ContentActivity.java。

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

【问题讨论】:

    标签: java android data-binding navigation-drawer android-databinding


    【解决方案1】:

    在 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_hader_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>
    

    这应该根据你的例外情况,你可以将文本和图像绑定到导航抽屉

    【讨论】:

    • 如果您使用工具栏工具栏 = findViewById(R.id.toolbar);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2013-05-24
    相关资源
    最近更新 更多