更改文本标题xml

问题描述:

我有一个活动,在加载时我想更新一个文本框。该文本字段存储在外部XML文件中该活动布局的标题中。当试图设置指向该XML文件的文本时,我得到一个nullpointer异常。更改文本标题xml

这里的活动中,我使用:

public class NavDrawerMain extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

//JAC - need to add big search box right at the top of the drawer 

//stuff for the user Timeline 
private CustomAdapter timelineAdapter; 
private ListView timelineList; 

private PullToRefreshView mPullToRefreshView; 

public static final int REFRESH_DELAY = 2000; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_nav_drawer_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) 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(); 
     } 
    }); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

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

    TextView userName = (TextView) findViewById(R.id.drawerUserName); 
    userName.setText("test"); 

这是该活动的布局:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:background="#e5e5e5" 
    android:layout_height="wrap_content"> 

    <com.yalantis.phoenix.PullToRefreshView 
     android:id="@+id/pull_to_refresh" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <ListView 
      android:id="@+id/timeListView" 
      android:layout_marginLeft="16dp" 
      android:layout_marginRight="16dp" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:divider="@null" 
      android:dividerHeight="0dp"/> 

    </com.yalantis.phoenix.PullToRefreshView> 


</RelativeLayout> 

<include layout="@layout/app_bar_nav_drawer_main" android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<android.support.design.widget.NavigationView android:id="@+id/nav_view" 
    android:layout_width="wrap_content" android:layout_height="match_parent" 
    android:layout_gravity="start" android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_nav_drawer_main" 
    app:menu="@menu/activity_nav_drawer_main_drawer" /> 

,最后这里是外部xml文件,其中包含TextView我想改变。此文件是活动的XML的文件头

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="@dimen/nav_header_height" 
android:background="@drawable/side_nav_bar" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:theme="@style/ThemeOverlay.AppCompat.Dark" android:orientation="vertical" 
android:gravity="bottom"> 
android:id="+id/RelativeLayout1"  

<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:paddingTop="@dimen/nav_header_vertical_spacing" 
    android:src="@android:drawable/sym_def_app_icon" android:id="@+id/imageView" /> 

<TextView android:layout_width="match_parent" android:layout_height="wrap_content" 
    android:paddingTop="@dimen/nav_header_vertical_spacing" android:text="Android Studio" 
    android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> 

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:text="[email protected]" android:id="@+id/drawerUserName" /> 

的textviews id为drawerUserName。我曾经在某处读过我需要夸大布局,但一直未能弄清楚的地方。

在您的活动膨胀header_layout这样

View headerView = LayoutInflater.from(this).inflate(R.layout.header_layout, null); 
TextView userName = (TextView) headerView.findViewById(R.id.drawerUserName); 
userName.setText("test"); 

现在,它作为一个HeaderView添加到NavigationView

navigationView.addHeaderView(headerView); 

这应该是它!

对于熟悉的问题检查; NavigationView how to handle dynamic header content

+0

嗯做exacly你说的它需要的头布局,并将其放置在右侧上活动......不是我想会发生什么 –

+0

就是你正在努力实现它的一切之上的方式吗?你是否希望'header'只在从pull到refresh时加载才会出现?或者它只是在错误的位置? –

+0

啊好吧,所以标题是从活动打开的抽屉 –