【问题标题】:InflateException at spefic case, what am I missing?InflateException 在特定情况下,我错过了什么?
【发布时间】:2019-10-16 12:17:18
【问题描述】:

当 ChatActivity 不是 LAUNCHER 活动时,我从 ChatActivity 收到 InflateException,但当我更改清单以使 ChatActivity 是 LAUNCHER 时,应用程序可以正常工作。 我可能遗漏了什么,代码中是否遗漏了什么?

16.10 18:15 更新 - 我发现如果我删除

implements View.OnClickListener

从 LoginActivity 应用程序工作(但现在我没有按钮)。 这个问题的原因是什么,如何解决?

产生错误时的部分清单 -

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".Activities.LoginActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Activities.ChatMainActivity"></activity>
    <activity android:name=".Activities.RegisterActivity" />

如果我将文件更改为此(如下),聊天将正常工作 -

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".Activities.LoginActivity"></activity>
    <activity android:name=".Activities.ChatMainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Activities.RegisterActivity" />

依赖关系 -

implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'com.google.android.material:material:1.0.0'

ChatActivity 的 XML 文件 -

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  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"
    tools:context=".Activities.ChatMainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/appBarLayout">

        <androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/main_app_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        </androidx.appcompat.widget.Toolbar>

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/main_tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"></com.google.android.material.tabs.TabLayout>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/main_tabPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/appBarLayout">
    </androidx.viewpager.widget.ViewPager>
</RelativeLayout>

活动-

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import androidx.appcompat.widget.Toolbar;

import com.google.android.material.tabs.TabLayout;
import com.nirkov.hive.Fragments.ChatFragment;
import com.nirkov.hive.Fragments.ChatOffersFragment;
import com.nirkov.hive.Fragments.ChatRequestsFragment;
import com.nirkov.hive.R;

public class ChatMainActivity extends AppCompatActivity {

private ViewPager mViewPager;
private SectionsPagerAdapter mSectionsPagerAdapter;
private TabLayout mTabLayout;
private Toolbar mToolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat_main);

    mToolbar = (Toolbar) findViewById(R.id.main_app_bar);
    setSupportActionBar(mToolbar);
    getSupportActionBar().setTitle("Chat");

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.main_tabPager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    mTabLayout = (TabLayout) findViewById(R.id.main_tabs);
    mTabLayout.setupWithViewPager(mViewPager);
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
    super.onOptionsItemSelected(item);
    return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.chat_bar_layout, menu);
    return true;
}

@Override
public void onStart() {
    super.onStart();
}

private class SectionsPagerAdapter extends FragmentPagerAdapter {
    public SectionsPagerAdapter(@NonNull FragmentManager fm) {
        super(fm);
    }

    @NonNull
    @Override
    public Fragment getItem(final int position) {
        switch (position){
            case 0:
                return new ChatRequestsFragment();
            case 1:
                return new ChatFragment();
            case 2:
                return new ChatOffersFragment();
        }
        return null;
    }

    @Override
    public int getCount() {
        return 3;
    }

    public CharSequence getPageTitle(final int position){

        switch(position){
            case 0:
                return "REQUESTS";
            case 1:
                return "CHATS";
            case 2:
                return "OFFERS";
        }
        return null;
    }
}
}

appTheme 风格 -

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

LoginActivity -

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.nirkov.hive.R;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "LoginActivity";

private Button   loginButton;
private EditText emailBox, passwordBox;
private TextView registerHereLink;

private FirebaseAuth mAuth;

ProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    loginButton      = (Button)  findViewById(R.id.loginButton);
    emailBox         = (EditText)findViewById(R.id.emailBox);
    passwordBox      = (EditText)findViewById(R.id.passwordBox);
    registerHereLink = (TextView)findViewById(R.id.registerHereLink);

    progressBar      = (ProgressBar) findViewById(R.id.loginProgressBar);

    mAuth = FirebaseAuth.getInstance();

    loginButton.setOnClickListener(this);
    registerHereLink.setOnClickListener(this);

}

@Override
public void onStart() {
    super.onStart();
    if(mAuth.getCurrentUser() != null){
        startActivity(new Intent(this, ChatMainActivity.class));
    }
}

@Override
public void onClick(View view) {
    switch(view.getId()){
        case R.id.loginButton:
            String email    = emailBox.getText().toString();
            String password = passwordBox.getText().toString();

            loginButton.setVisibility(View.GONE);
            progressBar.setVisibility(View.VISIBLE);

            signIn(email, password);
            break;

        case R.id.registerHereLink:
            startActivity(new Intent(LoginActivity.this, RegisterActivity.class));
            break;
    }
}

private void signIn(String email, final String password){
    mAuth.signInWithEmailAndPassword(email, password).
            addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if(task.isSuccessful()){
                        Log.d(TAG, "signIn : success");
                        startActivity(new Intent(LoginActivity.this, MainActivity.class));
                    }else{
                        Log.w(TAG, "signIn:failure", task.getException());
                        Toast.makeText(LoginActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }
                    progressBar.setVisibility(View.GONE);
                    loginButton.setVisibility(View.VISIBLE);
                }
            });
}
}

登录 XML 文件 -

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".Activities.LoginActivity">

<TextView
    android:id="@+id/email"
    android:layout_width="255dp"
    android:layout_height="34dp"
    android:layout_marginStart="20dp"
    android:layout_marginTop="32dp"
    android:text="Email:"
    android:textSize="24sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<EditText
    android:id="@+id/emailBox"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="16dp"
    android:ems="10"
    android:inputType="textPersonName"
    android:text=""
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/email" />

<!--Password : text view and text box-->
<TextView
    android:id="@+id/password"
    android:layout_width="133dp"
    android:layout_height="31dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="Password:"
    android:textSize="24sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/emailBox" />

<EditText
    android:id="@+id/passwordBox"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="16dp"
    android:ems="10"
    android:inputType="textPersonName"
    android:text=""
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/password" />

<Button
    android:id="@+id/loginButton"
    android:layout_width="115dp"
    android:layout_height="37dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="20dp"
    android:layout_marginEnd="8dp"
    android:text="Login"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.497"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/passwordBox" />

<ProgressBar
    android:id="@+id/loginProgressBar"
    style="?android:attr/progressBarStyle"
    android:layout_width="wrap_content"
    android:layout_height="38dp"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"
    android:visibility="invisible"
    app:layout_constraintBottom_toTopOf="@+id/spaceInBottom"
    app:layout_constraintEnd_toEndOf="@+id/loginButton"
    app:layout_constraintStart_toStartOf="@+id/loginButton"
    app:layout_constraintTop_toTopOf="@+id/loginButton" />

<TextView
    android:id="@+id/registerHereLink"
    android:layout_width="63dp"
    android:layout_height="12dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginStart="8dp"
    android:layout_marginTop="3dp"
    android:layout_marginEnd="8dp"
    android:text="Register Here"
    android:textSize="10sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.498"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/loginButton" />

</androidx.constraintlayout.widget.ConstraintLayout>

完整的错误 -

2019-10-16 01:07:43.323 6109-6109/com.nirkov.hive E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nirkov.hive, PID: 6109
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nirkov.hive/com.nirkov.hive.Activities.ChatMainActivity}: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class android.support.design.widget.AppBarLayout
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class android.support.design.widget.AppBarLayout
 Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class android.support.design.widget.AppBarLayout
 Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.design.widget.AppBarLayout" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.nirkov.hive-8a2GYMMALuvTn0Up_KEgfw==/base.apk"],nativeLibraryDirectories=[/data/app/com.nirkov.hive-8a2GYMMALuvTn0Up_KEgfw==/lib/x86, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.view.LayoutInflater.createView(LayoutInflater.java:606)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
    at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
    at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
    at com.nirkov.hive.Activities.ChatMainActivity.onCreate(ChatMainActivity.java:38)
    at android.app.Activity.performCreate(Activity.java:7136)
    at android.app.Activity.performCreate(Activity.java:7127)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

【问题讨论】:

  • 你能发布你的 AppTheme 风格吗?
  • 是的,我更新了帖子。 @SebastienRieu
  • 你能发布完整的堆栈跟踪吗?
  • 是的,我添加了它@paxcow
  • startActivity(new Intent(LoginActivity.this, MainActivity.class));您的清单中没有 MainActivity。是不是笔误?

标签: android android-inflate


【解决方案1】:

上传登录Activity代码,告诉我哪个是你的父类

【讨论】:

    【解决方案2】:

    你可以尝试添加

    <item name="windowNoTitle">true</item>
    

    你的主要风格,看看是否有效?

    【讨论】:

    • 这个错误很奇怪,它说android.support.design.widget.AppBarLayout 但是,你的依赖是材料设计库和android x。你能确保你的项目中没有任何 android.support.design.widget.AppBarLayout 的导入吗?另外,如果您更改了这些,清理并重新构建应用程序也可能会解决问题,如果您还没有尝试过
    • 我尝试通过android studio搜索在所有文件中搜索android.support.design.widget.AppBarLayout,但没有找到任何东西
    【解决方案3】:

    Didn't find class "android.support.design.widget.AppBarLayout" on path 来自您错误地设置工具栏的活动:

    mToolbar = (Toolbar) findViewById(R.id.main_app_bar);
    setSupportActionBar(mToolbar);
    

    您的工具栏由com.google.android.material.appbar.AppBarLayout 包裹。

    因此无需将其添加到 supportActionBar。 只需将您的活动主题定义为NoActionBar(在您的styles.xml 中)并在您的活动中删除setSupportActionBar(mToolbar);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2021-11-06
      • 2014-02-15
      相关资源
      最近更新 更多