2017-07-16 80 views
0

我试图开发一个类Checkerboard,延伸View显示一个棋盘使用onDrawn方法在画布上。错误膨胀一个自定义视图类

然而,当我尝试包括它变成一个布局,安卓抛出我下面的错误:

07-16 13:26:34.677 2478-2478/? E/AndroidRuntime: FATAL EXCEPTION: main 
              Process: vmc.chesslys, PID: 2478 
              java.lang.RuntimeException: Unable to start activity ComponentInfo{vmc.chesslys/vmc.chesslys.MainActivity}: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class vmc.chesslys.CheckerBoard 
               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
               at android.app.ActivityThread.-wrap12(ActivityThread.java) 
               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
               at android.os.Handler.dispatchMessage(Handler.java:102) 
               at android.os.Looper.loop(Looper.java:154) 
               at android.app.ActivityThread.main(ActivityThread.java:6077) 
               at java.lang.reflect.Method.invoke(Native Method) 
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
               Caused by: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class vmc.chesslys.CheckerBoard 
               Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class vmc.chesslys.CheckerBoard 
               Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 
               at java.lang.Class.getConstructor0(Class.java:2204) 
               at java.lang.Class.getConstructor(Class.java:1683) 
               at android.view.LayoutInflater.createView(LayoutInflater.java:618) 
               at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787) 
               at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
               at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) 
               at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 
               at android.view.LayoutInflater.parseInclude(LayoutInflater.java:994) 
               at android.view.LayoutInflater.rInflate(LayoutInflater.java:854) 
               at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 
               at android.view.LayoutInflater.parseInclude(LayoutInflater.java:994) 
               at android.view.LayoutInflater.rInflate(LayoutInflater.java:854) 
               at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 
               at android.view.LayoutInflater.inflate(LayoutInflater.java:518) 
               at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
               at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
               at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:292) 
               at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
               at vmc.chesslys.MainActivity.onCreate(MainActivity.java:22) 
               at android.app.Activity.performCreate(Activity.java:6662) 
               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
               at android.app.ActivityThread.-wrap12(ActivityThread.java) 
               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
               at android.os.Handler.dispatchMessage(Handler.java:102) 
               at android.os.Looper.loop(Looper.java:154) 
               at android.app.ActivityThread.main(ActivityThread.java:6077) 
               at java.lang.reflect.Method.invoke(Native Method) 
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

这是我的XML:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.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" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="vmc.chesslys.MainActivity" 
    tools:showIn="@layout/app_bar_main"> 

    <view 
     class="vmc.chesslys.CheckerBoard" 
     android:id="@+id/chessboard" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 
</android.support.constraint.ConstraintLayout> 

这是wthat膨胀它的主要活动:

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_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); 
} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_camera) { 
     // Handle the camera action 
    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 
} 

你能帮我吗?

在此先感谢

回答

2

CheckerBoard类缺少两个参数的构造函数public采取ContextAttributeSet。这是LayoutInflater使用的构造函数。

+0

谢谢!这是错误^^ –