我正在尝试遵循本教程http://www.androidhive.info/2015/04/android-getting-started-with-material-design/。当我到达第 13 步时,我测试了该应用程序,它工作正常,但是当我到达第 23 步导航抽屉时,我遇到了一个问题,即
android.support.v7.widget.RecyclerView cannot be instantiated
在阅读其他网站关于此问题的评论后,我得出结论,我必须在预览面板上设置 API 级别 22,但由于我的 ADT 与我尝试更新它(我的 ADT)不兼容,并且一切顺利,直到我到了第 23 步,我现在尝试测试我的应用程序是否根据教程运行。令我沮丧的是,ADT
unable to bind xxxx to DDMS
我尝试通过遵循包括此站点在内的各个站点的其他说明再次修复该错误。我添加了 127.0.0.1 localhost来自 windows 主机文件,因为除了它只是被评论之外没有其他文件。我什至尝试使用此代码adb kill-server和adb start-servercmd。我还去了window -> preference -> Android -> DDMS那里,我尝试输入值8601 on Base local debugger port并check the use ADBHOST添加了values 127.0.0.1. 我一一做了,但不幸的是错误仍然存在。
我面临的问题是该应用程序无法在 bluestack 上启动或运行。我尝试运行我的另一个应用程序项目以查看它们是否碰巧没有运行,但似乎它们运行顺利并且在 bluestack 上没有错误或崩溃,所以我认为这与我正在关注的项目有关上面提到的教程,但我不知道如何弄清楚,因为我的所有代码都很好,没有红色标记或错误,但他们只是有警告,这对我来说似乎没问题。
这是我的 Manifest.xml(您可以在上面的教程中看到直到步骤 23 的其余代码)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.eureka4.studentdictionary"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/MyMaterialTheme" >
<activity
android:name=".activity.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我的 SDK 已经是最新的,最新版本是 23,我的支持库也是 23。
这是我的 LogCat,我添加了从详细到错误的所有内容:
02-21 18:56:22.596: W/dalvikvm(15690): VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
02-21 18:56:22.596: I/dalvikvm(15690): Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested
02-21 18:56:22.596: W/dalvikvm(15690): VFY: unable to resolve interface method 16375: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
02-21 18:56:22.596: D/dalvikvm(15690): VFY: replacing opcode 0x72 at 0x0002
02-21 18:56:22.596: I/dalvikvm(15690): Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode
02-21 18:56:22.596: W/dalvikvm(15690): VFY: unable to resolve interface method 16379: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
02-21 18:56:22.596: D/dalvikvm(15690): VFY: replacing opcode 0x72 at 0x0002
02-21 18:56:22.656: I/AppCompatViewInflater(15690): app:theme is now deprecated. Please move to using android:theme instead.
02-21 18:56:22.656: I/dalvikvm(15690): Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations
02-21 18:56:22.656: W/dalvikvm(15690): VFY: unable to resolve virtual method 406: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
02-21 18:56:22.656: D/dalvikvm(15690): VFY: replacing opcode 0x6e at 0x0002
02-21 18:56:22.656: I/dalvikvm(15690): Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
02-21 18:56:22.656: W/dalvikvm(15690): VFY: unable to resolve virtual method 428: Landroid/content/res/TypedArray;.getType (I)I
02-21 18:56:22.656: D/dalvikvm(15690): VFY: replacing opcode 0x6e at 0x0002
02-21 18:56:22.706: D/AndroidRuntime(15690): Shutting down VM
02-21 18:56:22.706: W/dalvikvm(15690): threadid=1: thread exiting with uncaught exception (group=0x55e05b20)
02-21 18:56:22.706: D/AndroidRuntime(15690): procName from cmdline: com.eureka4.studentdictionary
02-21 18:56:22.706: E/AndroidRuntime(15690): in writeCrashedAppName, pkgName :com.eureka4.studentdictionary
02-21 18:56:22.746: I/Process(15690): Sending signal. PID: 15690 SIG: 9
02-21 18:56:22.936: W/dalvikvm(15708): VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
02-21 18:56:22.936: I/dalvikvm(15708): Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested
02-21 18:56:22.936: W/dalvikvm(15708): VFY: unable to resolve interface method 16375: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
02-21 18:56:22.936: D/dalvikvm(15708): VFY: replacing opcode 0x72 at 0x0002
02-21 18:56:22.936: I/dalvikvm(15708): Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode
02-21 18:56:22.936: W/dalvikvm(15708): VFY: unable to resolve interface method 16379: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
02-21 18:56:22.936: D/dalvikvm(15708): VFY: replacing opcode 0x72 at 0x0002
02-21 18:56:22.966: I/AppCompatViewInflater(15708): app:theme is now deprecated. Please move to using android:theme instead.
02-21 18:56:22.966: I/dalvikvm(15708): Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations
02-21 18:56:22.966: W/dalvikvm(15708): VFY: unable to resolve virtual method 406: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
02-21 18:56:22.976: D/dalvikvm(15708): VFY: replacing opcode 0x6e at 0x0002
02-21 18:56:22.976: I/dalvikvm(15708): Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
02-21 18:56:22.976: W/dalvikvm(15708): VFY: unable to resolve virtual method 428: Landroid/content/res/TypedArray;.getType (I)I
02-21 18:56:22.976: D/dalvikvm(15708): VFY: replacing opcode 0x6e at 0x0002
02-21 18:56:42.506: W/dalvikvm(15781): VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
02-21 18:56:42.506: I/dalvikvm(15781): Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested
02-21 18:56:42.506: W/dalvikvm(15781): VFY: unable to resolve interface method 16375: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
02-21 18:56:42.506: D/dalvikvm(15781): VFY: replacing opcode 0x72 at 0x0002
02-21 18:56:42.506: I/dalvikvm(15781): Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode
02-21 18:56:42.516: W/dalvikvm(15781): VFY: unable to resolve interface method 16379: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
02-21 18:56:42.516: D/dalvikvm(15781): VFY: replacing opcode 0x72 at 0x0002
02-21 18:56:42.546: I/AppCompatViewInflater(15781): app:theme is now deprecated. Please move to using android:theme instead.
02-21 18:56:42.556: I/dalvikvm(15781): Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations
02-21 18:56:42.556: W/dalvikvm(15781): VFY: unable to resolve virtual method 406: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
02-21 18:56:42.556: D/dalvikvm(15781): VFY: replacing opcode 0x6e at 0x0002
02-21 18:56:42.556: I/dalvikvm(15781): Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
02-21 18:56:42.556: W/dalvikvm(15781): VFY: unable to resolve virtual method 428: Landroid/content/res/TypedArray;.getType (I)I
02-21 18:56:42.556: D/dalvikvm(15781): VFY: replacing opcode 0x6e at 0x0002
02-21 18:56:42.586: D/AndroidRuntime(15781): Shutting down VM
02-21 18:56:42.596: W/dalvikvm(15781): threadid=1: thread exiting with uncaught exception (group=0x55e05b20)
02-21 18:56:42.596: I/Process(15781): Sending signal. PID: 15781 SIG: 9
02-21 18:56:42.596: D/AndroidRuntime(15781): procName from cmdline: com.eureka4.studentdictionary
02-21 18:56:42.596: E/AndroidRuntime(15781): in writeCrashedAppName, pkgName :com.eureka4.studentdictionary
02-21 18:56:42.596: D/AndroidRuntime(15781): file written successfully with content: com.eureka4.studentdictionary StringBuffer : ;com.eureka4.studentdictionary
02-21 18:56:42.596: E/AndroidRuntime(15781): FATAL EXCEPTION: main
02-21 18:56:42.596: E/AndroidRuntime(15781): Process: com.eureka4.studentdictionary, PID: 15781
02-21 18:56:42.596: E/AndroidRuntime(15781): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.eureka4.studentdictionary/com.eureka4.studentdictionary.activity.MainActivity}: android.view.InflateException: Binary XML file line #36: Error inflating class fragment
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.ActivityThread.access$800(ActivityThread.java:135)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.os.Handler.dispatchMessage(Handler.java:102)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.os.Looper.loop(Looper.java:136)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.ActivityThread.main(ActivityThread.java:5021)
02-21 18:56:42.596: E/AndroidRuntime(15781): at java.lang.reflect.Method.invokeNative(Native Method)
02-21 18:56:42.596: E/AndroidRuntime(15781): at java.lang.reflect.Method.invoke(Method.java:515)
02-21 18:56:42.596: E/AndroidRuntime(15781): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)
02-21 18:56:42.596: E/AndroidRuntime(15781): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
02-21 18:56:42.596: E/AndroidRuntime(15781): at dalvik.system.NativeStart.main(Native Method)
02-21 18:56:42.596: E/AndroidRuntime(15781): Caused by: android.view.InflateException: Binary XML file line #36: Error inflating class fragment
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
02-21 18:56:42.596: E/AndroidRuntime(15781): at com.eureka4.studentdictionary.activity.MainActivity.onCreate(MainActivity.java:25)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.Activity.performCreate(Activity.java:5231)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
02-21 18:56:42.596: E/AndroidRuntime(15781): ... 11 more
02-21 18:56:42.596: E/AndroidRuntime(15781): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.eureka4.studentdictionary.FragmentDrawer: make sure class name exists, is public, and has an empty constructor that is public
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.Fragment.instantiate(Fragment.java:597)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.Fragment.instantiate(Fragment.java:561)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.Activity.onCreateView(Activity.java:4778)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:34)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79)
02-21 18:56:42.596: E/AndroidRuntime(15781): at com.eureka4.studentdictionary.activity.MainActivity.onCreateView(MainActivity.java:1)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
02-21 18:56:42.596: E/AndroidRuntime(15781): ... 21 more
02-21 18:56:42.596: E/AndroidRuntime(15781): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.eureka4.studentdictionary.FragmentDrawer" on path: DexPathList[[zip file "/data/app/com.eureka4.studentdictionary-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.eureka4.studentdictionary-2, /system/lib, /system/lib/arm, /data/downloads]]
02-21 18:56:42.596: E/AndroidRuntime(15781): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
02-21 18:56:42.596: E/AndroidRuntime(15781): at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
02-21 18:56:42.596: E/AndroidRuntime(15781): at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
02-21 18:56:42.596: E/AndroidRuntime(15781): at android.app.Fragment.instantiate(Fragment.java:583)
02-21 18:56:42.596: E/AndroidRuntime(15781): ... 27 more
02-21 18:56:42.756: I/AppCompatViewInflater(15794): app:theme is now deprecated. Please move to using android:theme instead.
02-21 18:56:42.756: I/dalvikvm(15794): Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations
02-21 18:56:42.786: W/dalvikvm(15794): VFY: unable to resolve virtual method 406: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
02-21 18:56:42.786: D/dalvikvm(15794): VFY: replacing opcode 0x6e at 0x0002
02-21 18:56:42.786: I/dalvikvm(15794): Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
02-21 18:56:42.786: W/dalvikvm(15794): VFY: unable to resolve virtual method 428: Landroid/content/res/TypedArray;.getType (I)I
02-21 18:56:42.786: D/dalvikvm(15794): VFY: replacing opcode 0x6e at 0x0002
02-21 18:56:42.786: D/AndroidRuntime(15794): Shutting down VM
02-21 18:56:42.786: W/dalvikvm(15794): threadid=1: thread exiting with uncaught exception (group=0x55e05b20)
02-21 18:56:42.786: D/AndroidRuntime(15794): procName from cmdline: com.eureka4.studentdictionary
02-21 18:56:42.786: E/AndroidRuntime(15794): in writeCrashedAppName, pkgName :com.eureka4.studentdictionary
02-21 18:56:42.786: D/AndroidRuntime(15794): file written successfully with content: com.eureka4.studentdictionary StringBuffer : ;com.eureka4.studentdictionary
我正在使用 Eclipse,因为它的 CPU 要求比 Android Studio 轻。另外,我的模拟器是bluestack。
这是我的 FragmentDrawer.java
package com.eureka4.studentdictionary;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import com.eureka4.studentdictionary.R;
public class FragmentDrawer extends Fragment {
private static String TAG = FragmentDrawer.class.getSimpleName();
private RecyclerView recyclerView;
private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout;
private NavigationDrawerAdapter adapter;
private View containerView;
private static String[] titles = null;
private FragmentDrawerListener drawerListener;
public FragmentDrawer() {
}
public void setDrawerListener(FragmentDrawerListener listener) {
this.drawerListener = listener;
}
public static List<NavDrawerItem> getData() {
List<NavDrawerItem> data = new ArrayList<>();
// preparing navigation drawer items
for (int i = 0; i < titles.length; i++) {
NavDrawerItem navItem = new NavDrawerItem();
navItem.setTitle(titles[i]);
data.add(navItem);
}
return data;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// drawer labels
titles = getActivity().getResources().getStringArray(R.array.nav_drawer_labels);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflating view layout
View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList);
adapter = new NavigationDrawerAdapter(getActivity(), getData());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() {
@Override
public void onClick(View view, int position) {
drawerListener.onDrawerItemSelected(view, position);
mDrawerLayout.closeDrawer(containerView);
}
@Override
public void onLongClick(View view, int position) {
}
}));
return layout;
}
public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) {
containerView = getActivity().findViewById(fragmentId);
mDrawerLayout = drawerLayout;
mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getActivity().invalidateOptionsMenu();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
getActivity().invalidateOptionsMenu();
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
toolbar.setAlpha(1 - slideOffset / 2);
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mDrawerToggle.syncState();
}
});
}
public static interface ClickListener {
public void onClick(View view, int position);
public void onLongClick(View view, int position);
}
static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
private GestureDetector gestureDetector;
private ClickListener clickListener;
public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
this.clickListener = clickListener;
gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@SuppressWarnings("deprecation")
@Override
public void onLongPress(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null) {
clickListener.onLongClick(child, recyclerView.getChildPosition(child));
}
}
});
}
@SuppressWarnings("deprecation")
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
clickListener.onClick(child, rv.getChildPosition(child));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
public interface FragmentDrawerListener {
public void onDrawerItemSelected(View view, int position);
}
}