【问题标题】:get XML's id from not linked activity从未链接的活动中获取 XML\'s id
【发布时间】:2022-11-08 17:05:59
【问题描述】:

想要做

我想得到android:id = "@+id/drawer_layout2"在与不相关的活动中设置内容视图因为我要打开导航?抽屉布局?用一个按钮。我已经知道了抽屉.OpenDrawer(GravityCompat.Start)打开它但是抽屉一片空白。

关系

MainActivity.cs - activity_main.xml

NaviDrawer.cs - 抽屉.xml

错误信息

System.NullReferenceException: 'Object reference not set to an instance of an object.'

代码

主要活动

public class MainActivity : AppCompatActivity, NavigationView.IOnNavigationItemSelectedListener, TabLayout.IOnTabSelectedListener
{
    private Context context;
    DrawerLayout m_drawer;

protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        SetContentView(Resource.Layout.activity_main);
        context = this;

        m_drawer = FindViewById<DrawerLayout>(Resource.Id.drawer_layout2);

        btn_drawer = FindViewById<Button>(Resource.Id.btn_drawer);
        btn_drawer.Click += Btn_Drawer_Click;
    }

    private void Btn_Drawer_Click(object sender, EventArgs args)
    {
        m_drawer.OpenDrawer(GravityCompat.Start);
    }

抽屉.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
                                    xmlns:app="http://schemas.android.com/apk/res-auto"
                                    xmlns:tools="http://schemas.android.com/tools"
                                    android:id="@+id/drawer_layout2"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:fitsSystemWindows="true"
                                    tools:openDrawer="start">

  <com.google.android.material.navigation.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/test"
            android:layout_width="match_parent"
            android:layout_height="58dp"
            android:text="test"
            android:textSize="12dp"
            android:gravity="center">
        </TextView>
    </LinearLayout>

  </com.google.android.material.navigation.NavigationView>

</androidx.drawerlayout.widget.DrawerLayout>

【问题讨论】:

    标签: c# android-studio xamarin


    【解决方案1】:

    您可以直接在视图/片段中获取当前抽屉,这样您就不会得到 NullPointerException,例如:

    m_drawer = (DrawerLayout) getActivity().findViewById(Resource.Id.drawer_layout2);
    

    然后在您的按钮单击事件中,您可以尝试这样设置:

    private void Btn_Drawer_Click(object sender, EventArgs args)
    {
        m_drawer.OpenDrawer(m_drawer);
    }
    

    这些只是我的建议,希望对您有所帮助。如果有后续问题,我可能会跟进。

    【讨论】:

    • 谢谢你的答案。你知道替代方法吗获取活动()?因为它不适用于 C#。另外,我添加了关于 Activity 和 XML 之间关系的解释,所以请检查它。
    • 您可以尝试将“getActivity()”更改为“getView()”。
    • 错误告诉我getActivity() 和 getView() 在当前上下文中不存在.我需要导入一些包吗?
    • 您可以尝试将 getView() 替换为 getApplicationContext() 或视图。我会尽力给你我的建议。
    • 非常感谢你的话。我尝试了这些但没有用。我最后想做的是打开导航?抽屉布局?从点击按钮。因此,我应该寻找其他方式并提出新问题。如果你能检查那个问题,我很高兴。
    【解决方案2】:

    链接文件

    ActivityMain.cs - activity_main.xml

    FragmentEvent.cs - fragment_event.xml

    (此时我访问drawerlayout IS在活动主片段事件)

    添加源

    ((ActivityMain)Activity).m_drawer.OpenDrawer(GravityCompat.Start);
    

    固定来源

    我改变m_drawer从私人到公共

    ActivityMain.cs

    public class MainActivity : AppCompatActivity, NavigationView.IOnNavigationItemSelectedListener, TabLayout.IOnTabSelectedListener
    {
        private Context context;
        //DrawerLayout m_drawer;
        public DrawerLayout m_drawer;
    

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 2016-05-09
      • 2016-12-07
      • 2022-01-07
      • 2016-05-24
      • 2016-07-14
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多