当前位置: 首页 > 知识库问答 >
问题:

如何在导航抽屉活动中完成双向数据绑定?

史修谨
2023-03-14
 <layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="policyinfo"
            type="com.exlservice.lifeprov1.service.model.GetPolicyInfoResponse" />

        <variable
            name="surrenderquote"
            type="com.exlservice.lifeprov1.service.model.SurrenderQuoteResponse" />
    </data>
<android.support.constraint.ConstraintLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:id="@+id/c1"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".view.ui.PolicyInfo"
    tools:showIn="@layout/app_bar_policy_info">
    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:background="#223d50"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <LinearLayout android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:background="@drawable/policy_prime_info_bg"
                android:layout_marginTop="20dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                >
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="8dp"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="0dp"
                        android:layout_marginLeft="5dp"
                        android:layout_height="wrap_content"
                        android:text="@{policyInfo.ProductId}"
                        android:textColor="#76c6db"
                        android:layout_weight="1"
                        android:typeface="serif"
                        android:textStyle="bold"
                        android:id="@+id/id_fc_first_key"/>
                    <TextView
                        android:layout_width="0dp"
                        android:textColor="#76c6db"
                        android:textStyle="bold"
                        android:typeface="serif"
                        android:layout_height="wrap_content"
                        android:text="@{policyInfo.Contract}"
                        android:layout_weight="1"
                        android:id="@+id/id_fc_second_key"/>

                </LinearLayout>
           </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</android.support.constraint.ConstraintLayout>
</layout>
public class PolicyInfo extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {
APIInterface apiInterface;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding= DataBindingUtil.setContentView(this,R.layout.activity_policy_info);
    Intent intent = getIntent();
    String sCompanyCode = intent.getStringExtra("CompanyCode");
    String sPolicyNumber = intent.getStringExtra("PolicyNumber");
    String sWayPoint = intent.getStringExtra("WayPoint");
    Log.e("onCreate: ",sCompanyCode+"   "+sPolicyNumber );
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String currentTime = sdf.format(new Date());
    SurrenderQuoteInput surrenderQuoteInput = new SurrenderQuoteInput();
    surrenderQuoteInput.setCoderID("TRN7");
    surrenderQuoteInput.setCompanyCode("01");



    PolicyDetailsReq policyDetailsReq= new PolicyDetailsReq();
    policyDetailsReq.setCoderID("TRN7");

    getPolicyInfoRequest.setPolicyDetailsReq(policyDetailsReq);

    PolicyInfoViewModel.Factory factory = new PolicyInfoViewModel.Factory(
            getApplication(),getPolicyInfoRequest,surrenderQuoteRequest);

    pd = new ProgressDialog(PolicyInfo.this);
    //setContentView(R.layout.activity_policy_info);

    pref= getSharedPreferences("LoginDetail", 0);
    Toolbar toolbar =  findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Poilcy Info");
    apiInterface = APIClient.getClient().create(APIInterface.class);
    FloatingActionButton fab =  findViewById(R.id.fab);



    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    apiInterface = APIClient.getClient().create(APIInterface.class);

    PolicyInfoViewModel viewModel =
            ViewModelProviders.of(this,factory).get(PolicyInfoViewModel.class);
    **observeViewModel**(viewModel);
    pd.setTitle("Loading...");
    pd.setMessage("Please wait.");
    pd.setCancelable(false);
    // show it
    pd.show();
    DrawerLayout drawer =  findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView =  findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

}
private void **observeViewModel**(final PolicyInfoViewModel viewModel) {
    // Update the list when the data changes
    viewModel.getPolicyInfoResponsetObservable().observe(this, new Observer<GetPolicyInfoResponse>() {
        @Override
        public void onChanged(@Nullable GetPolicyInfoResponse getPolicyInfoResponse) {
            if(getPolicyInfoResponse!=null) {
                viewModel.setPolicyInfoResult(getPolicyInfoResponse);
                binding.setPolicyinfo(getPolicyInfoResponse);
            }
           /* if (getLastAccessedDetailsResult != null) {
                getLastAccessedDetailsRes=getLastAccessedDetailsResult;
                viewModel.setLastAccessedDetailsResult(getLastAccessedDetailsResult);
                setupViewPager(viewPager);
            }*/
        }

    });
}

上面显示类转换异常的错误Android.Support.V7.Widget.AppCompattExtView不能转换为Android.Support.Design.Widget.NavigationView

全堆栈跟踪

共有1个答案

公西光华
2023-03-14

您似乎试图用AppCompatTextView初始化NavigationView

NavigationView navigationView =  findViewById(R.id.nav_view);

在onCreate()方法中的PolicyInfo活动第58行中

请尝试检查您在何处使用此ID(r.ID.nav_view),并正确初始化此ID(r.ID.nav_view)

 类似资料:
  • 我是android新手。我想实现一个由项目列表组成的导航抽屉,单击它会打开一个新活动。基本上是所有活动的导航抽屉。当我从导航抽屉中选择一个项目时,特定的活动就会打开。导航抽屉代码是通过执行空活动来实现的。我想在所有活动中实现导航抽屉功能,这些活动被视为空活动,这些活动已经有了一些功能,导航抽屉功能也可以工作。请帮帮我。 这是activity_header档案 这是我的主要活动 这是头活动java代

  • 问题内容: 我的所有活动中都应该出现一个。 我看到许多与此类似的问题,并找到了一个解决方案,例如通过其他活动扩展MainActivity。 所以我将我的主要活动扩展到了我的第二个活动。但是第二个活动中没有显示抽屉 主要活动 第二活动 问题答案: 在in中,不要调用此方法: 使在保护。并 只需将抽屉标签和重力保持在左侧(或右侧)。

  • 我有一个,它应该出现在我的所有活动中。 我看到了许多类似的问题&找到了一个解决方案,比如用其他活动扩展MainActivity。 所以我把我的主要活动扩展到我的第二个活动。但是抽屉没有在第二个活动中显示 主体活动 二次活动

  • 我正在试用本教程中给出的导航抽屉(幻灯片菜单)。 上面的链接和我的不同之处在于,我试图调用活动而不是调用片段。当应用程序打开时,我无法看到导航抽屉菜单,我只能看到打开HOME活动的操作栏。 以下是我更改的代码:(是否需要一个片段,或者我可以在导航抽屉的第一个屏幕上使用活动?) 我如何解决这个问题,以便在我的家庭活动中显示导航抽屉? 更新: 我甚至尝试了以下链接中给出的选项: 如何使用导航抽屉调用我

  • 我正在尝试使用Visual Studio2017在Xamarin中创建一个导航抽屉。我在谷歌做了一些研究后创建了导航抽屉。但当我尝试从菜单中打开活动时,导航抽屉消失了。 我想在我的所有活动中都有我的导航抽屉,而不是在所有活动中重复。 链接到我的项目:https://github.com/chindara/XamarinAndroidNavigationDrawer 更新链接:https://git

  • 你好,我想创建一个与导航抽屉活动在Android Studio点击事件。当我在左菜单中单击Gallery时,我有意将其重定向到Gallery activity。这是好的,它的工作,但没有留下菜单在画廊的活动。我希望所有重定向的活动已经离开菜单。我怎么能这么做? 我只添加了intent line,其他的都是我选择NavigationDrawerActivity时的默认代码。 画廊布局