我正在开发一个具有导航抽屉的应用程序,并且需要用户登录。
到目前为止,我已经完成了整个用户登录/注册工作,并且我已经构建了导航抽屉。
我现在要做的是让导航抽屉上的TextView显示用户的全名和他/她的电子邮件。
我尝试使用LayoutInflater,但TextViews不会改变。
我也尝试将用户信息传递给LogCat并正确显示。
我不知道我的问题在哪里。
这是我的代码:
DrawerActivity.java
public class DrawerActivity extends AppCompatActivity{
public static String[] userInfo = LoginActivity.userInfo;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.navDrawerTheme);
setContentView(R.layout.activity_drawer_layout);
//Declare instances.
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ExpandableListView) findViewById(R.id.left_drawer);
mNavigationDrawer = (LinearLayout) findViewById(R.id.navigationDrawer);
LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
View drawerHeaderView = inflater.inflate(R.layout.drawer_header, null);
TextView tvFullName = (TextView) drawerHeaderView.findViewById(R.id.name);
TextView tvEmail = (TextView) drawerHeaderView.findViewById(R.id.email);
ImageView imgProfile = (ImageView) drawerHeaderView.findViewById(R.id.imgProfile);
tvFullName.setText(userInfo[0] + " " + userInfo[1]);
tvEmail.setText(userInfo[2]);
Log.d("First name", "First name: " + userInfo[0]);
Log.d("Last name", "Last name: " + userInfo[1]);
Log.d("Email", "Email: " + userInfo[2]);
...
修改
drawer_header.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="120dp"
android:background="#444444">
<RelativeLayout
android:id="@+id/userInfoWrapper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_toEndOf="@+id/imgProfile"
android:layout_alignParentTop="true">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:textColor="#ffffff"
android:singleLine="true"
android:textSize="14sp"
android:textStyle="bold"
android:layout_marginTop="40dp"/>
<TextView
android:id="@+id/email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:singleLine="true"
android:layout_marginLeft="16dp"
android:layout_marginTop="10dp"
android:textSize="14sp"
android:textStyle="normal"
android:layout_below="@id/name"/>
</RelativeLayout>
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="75dip"
android:layout_height="75dip"
android:src="@drawable/ic_face_white_48dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:id="@+id/imgProfile"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
编辑2
activity_drawer_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Activity Content-->
<FrameLayout
android:id="@+id/activity_frame"
android:layout_height="match_parent"
android:layout_width="match_parent">
</FrameLayout>
<LinearLayout
android:id="@+id/navigationDrawer"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_gravity="start"
android:layout_width="270dp">
<include
android:id="@+id/drawer_header"
layout="@layout/drawer_header" />
<ExpandableListView
android:id="@+id/left_drawer"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:groupIndicator="@android:color/transparent"
android:divider="@android:color/transparent"
android:background="#444444"/>
</LinearLayout>
感谢您的时间。
答案 0 :(得分:1)
我认为您不需要使用LayoutInflater,只需尝试这个并让我知道
TextView tvFullName = (TextView)findViewById(R.id.name);
TextView tvEmail = (TextView)findViewById(R.id.email);
ImageView imgProfile = (ImageView)findViewById(R.id.imgProfile);
tvFullName.setText(userInfo[0] + " " + userInfo[1]);
tvEmail.setText(userInfo[2]);
为了澄清它的工作原理,因为它已经在布局中定义,因此您可以直接访问它。如果您想使用定义的布局添加一些视图运行时,则使用LayoutInflater。
答案 1 :(得分:0)
您可以尝试拨打
drawerHeaderView.invalidate();
设置文本后刷新视图,因为布局已经膨胀。
我可能错了,但它可能是你获得LayoutInflater实例的方式的问题。试试
LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
答案 2 :(得分:0)
将膨胀的视图附加到父视图,如下所示:
RelativeLayout userInfoRL = (RelativeLayout)findViewById(R.id.userInfoWrapper);
userInfoRL.addView(drawerHeaderView);
//just in case use the userInfoRL.invalidate();
尝试一下,让我知道它是否有效。