ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 导航抽屉和android数据绑定

2019-07-10 22:01:31  阅读:229  来源: 互联网

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


对不起我的英语不好.我需要使用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上的按钮时,不会调用它.我该怎么办?创建一个单独的类ContentActivity.java whith函数showData.

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

解决方法:

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

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

标签:java,android,data-binding,navigation-drawer,android-databinding
来源: https://codeday.me/bug/20190710/1428371.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有