Android - 将菜单项扩展到 Actionbar 时出错
Android - Error when inflate Menu Item into Actionbar
我有以下问题,我只需要将一项(注销)膨胀到 LoginActivity
中显示的 ActionBar
。但它会抛出 "unexpected EOF!"
。所以我尝试了不同的方法来膨胀项目以在操作栏中显示它,但仍然没有很好的效果,最后我给出了错误消息。
这是示例图片(显示内容)
no item showed..
我的代码如下:
app/java/package/MainActivity.
public class MainActivity extends AppCompatActivity {
CircleImageView profile_image;
TextView username;
FirebaseUser firebaseUser;
DatabaseReference reference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar();
profile_image = findViewById(R.id.profile_image);
username = (TextView) findViewById(R.id.userId);
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User2 user = dataSnapshot.getValue(User2.class);
System.out.println(user);
Log.d("Userz",user.getUsername());
username.setText(user.getUsername().toString());
if(user.getImageURL().equals("default")){
profile_image.setImageResource(R.mipmap.ic_launcher);
} else {
Glide.with(MainActivity.this).load(user.getImageURL()).into(profile_image);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
//getMenuInflater().inflate(R.menu.menu,menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
Log.d("Itemid",item.toString());
switch(item.getItemId()){
case R.id.logoutItem:
FirebaseAuth.getInstance().signOut();
startActivity(new Intent(MainActivity.this, StartActivity.class));
finish();
return true;
}
return false;
}
}
app/res/menu/menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/logoutItem"
android:title="Logout"
app:showAsAction="always"
/>
</menu>
app/res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/MenuStyle">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/profile_image"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/userId"
android:text="username"
android:textColor="#fff"
android:layout_marginLeft="25dp"
android:layout_marginStart="25dp"
android:textStyle="bold"/>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
</LinearLayout>
错误信息:
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:631)
at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
at android.support.v7.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:403)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:191)
at com.affinity.affinityteam.firebase_chat_try2.MainActivity.onCreateView(MainActivity.java:40)
at android.app.Activity.onCreateView(Activity.java:6184)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:389)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:631)
at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
at android.support.v7.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:403)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:191)
at com.affinity.affinityteam.firebase_chat_try2.MainActivity.onCreateView(MainActivity.java:40)
at android.app.Activity.onCreateView(Activity.java:6184)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:389)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:631)
at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
at android.support.v7.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:403)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:191)
at com.affinity.affinityteam.firebase_chat_try2.MainActivity.onCreateView(MainActivity.java:40)
at android.app.Activity.onCreateView(Activity.java:6184)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:389)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:631)
at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
at android.support.v7.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:403)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:191)
at com.affinity.affinityteam.firebase_chat_try2.MainActivity.onCreateView(MainActivity.java:40)
at android.app.Activity.onCreateView(Activity.java:6184)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:389)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
read: unexpected EOF!
我认为错误 unexpected EOF 与您的代码无关,但与某些可能是固定大小的缓冲区大小的配置有关。要解决此问题,您可以在开发人员选项设置下将缓冲区大小设置为 off。
如果尚未启用,您可以在关于下启用设置并单击内部版本号,直到看到确认开发者选项的吐司已启用。
编辑:
在工具栏 XML 节点内,添加在 onCreate
回调
中调用的值为 toolbar
的 id 属性
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
//not sure that toolbar is not null since in xml there is no id toolbar
setSupportActionBar(toolbar);
getSupportActionBar();
由于无法找到 ID 为 toolbar
的视图,因此 findViewById returns null 和 setSupportActionBar 将得到一个 null 值,这意味着没有 Toolbar 可以转换为 ActionBar。
修改您的工具栏 XML 并添加 id 属性,如下所述:
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
android:id="@+id/toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/MenuStyle">
祝你好运
在您的 onCreate()
方法中,您尝试使用以下代码初始化工具栏:
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
您没有在 XML 文件中为工具栏视图指定 id
属性。
请在 XML 中指定工具栏的 ID,然后尝试 运行 它。
我认为您将按照上述解决方案解决此问题。
我有以下问题,我只需要将一项(注销)膨胀到 LoginActivity
中显示的 ActionBar
。但它会抛出 "unexpected EOF!"
。所以我尝试了不同的方法来膨胀项目以在操作栏中显示它,但仍然没有很好的效果,最后我给出了错误消息。
这是示例图片(显示内容) no item showed..
我的代码如下:
app/java/package/MainActivity.
public class MainActivity extends AppCompatActivity {
CircleImageView profile_image;
TextView username;
FirebaseUser firebaseUser;
DatabaseReference reference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar();
profile_image = findViewById(R.id.profile_image);
username = (TextView) findViewById(R.id.userId);
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User2 user = dataSnapshot.getValue(User2.class);
System.out.println(user);
Log.d("Userz",user.getUsername());
username.setText(user.getUsername().toString());
if(user.getImageURL().equals("default")){
profile_image.setImageResource(R.mipmap.ic_launcher);
} else {
Glide.with(MainActivity.this).load(user.getImageURL()).into(profile_image);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
//getMenuInflater().inflate(R.menu.menu,menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
Log.d("Itemid",item.toString());
switch(item.getItemId()){
case R.id.logoutItem:
FirebaseAuth.getInstance().signOut();
startActivity(new Intent(MainActivity.this, StartActivity.class));
finish();
return true;
}
return false;
}
}
app/res/menu/menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/logoutItem"
android:title="Logout"
app:showAsAction="always"
/>
</menu>
app/res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/MenuStyle">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/profile_image"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/userId"
android:text="username"
android:textColor="#fff"
android:layout_marginLeft="25dp"
android:layout_marginStart="25dp"
android:textStyle="bold"/>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
</LinearLayout>
错误信息:
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:631)
at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
at android.support.v7.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:403)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:191)
at com.affinity.affinityteam.firebase_chat_try2.MainActivity.onCreateView(MainActivity.java:40)
at android.app.Activity.onCreateView(Activity.java:6184)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:389)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:631)
at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
at android.support.v7.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:403)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:191)
at com.affinity.affinityteam.firebase_chat_try2.MainActivity.onCreateView(MainActivity.java:40)
at android.app.Activity.onCreateView(Activity.java:6184)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:389)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:631)
at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
at android.support.v7.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:403)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:191)
at com.affinity.affinityteam.firebase_chat_try2.MainActivity.onCreateView(MainActivity.java:40)
at android.app.Activity.onCreateView(Activity.java:6184)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:389)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:631)
at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
at android.support.v7.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:403)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:191)
at com.affinity.affinityteam.firebase_chat_try2.MainActivity.onCreateView(MainActivity.java:40)
at android.app.Activity.onCreateView(Activity.java:6184)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:389)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
read: unexpected EOF!
我认为错误 unexpected EOF 与您的代码无关,但与某些可能是固定大小的缓冲区大小的配置有关。要解决此问题,您可以在开发人员选项设置下将缓冲区大小设置为 off。
如果尚未启用,您可以在关于下启用设置并单击内部版本号,直到看到确认开发者选项的吐司已启用。
编辑:
在工具栏 XML 节点内,添加在 onCreate
回调
toolbar
的 id 属性
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
//not sure that toolbar is not null since in xml there is no id toolbar
setSupportActionBar(toolbar);
getSupportActionBar();
由于无法找到 ID 为 toolbar
的视图,因此 findViewById returns null 和 setSupportActionBar 将得到一个 null 值,这意味着没有 Toolbar 可以转换为 ActionBar。
修改您的工具栏 XML 并添加 id 属性,如下所述:
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
android:id="@+id/toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/MenuStyle">
祝你好运
在您的 onCreate()
方法中,您尝试使用以下代码初始化工具栏:
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
您没有在 XML 文件中为工具栏视图指定 id
属性。
请在 XML 中指定工具栏的 ID,然后尝试 运行 它。
我认为您将按照上述解决方案解决此问题。