2015-04-17 5 views
2

Я получаю это исключение при запуске:Не нашли класс «android.support.v7.widget.RecyclerView

android.view.InflateException: Binary XML файл строку # 8: надувать Ошибка класса android.support .v7.widget.RecyclerView
Вызвано: java.lang.ClassNotFoundException: Не нашел класс "android.support.v7.widget.RecyclerView" по пути: /data/app/my.package.location-1 .apk

Есть несколько вопросов относительно этой ошибки, из которых я научился:
- укажите точно support.v7 RecyclerView, в коде xml и Java.
- в Eclipse, я добавил эту банку файл в качестве библиотеки к проекту:
ADT-пачке окна-x86_64-20140321 \ SDK \ Extras \ Android \ поддержка \ v7 \ recyclerview \ ЛИЭС \ Android-поддержка-v7 -recyclerview.jar
- в Eclipse импортируйте существующий проект TestActivity в * adt-bundle-windows-x86_64-20140321 \ sdk \ extras \ android \ support \ v7 \ recyclerview * , а затем добавили этот проект в Java Build Путь моего собственного проекта.

Project Сложение Target является Android 5.1.1/API 22

Все никакого эффекта. Что еще есть?

от MyFragment.java

import android.support.v7.widget.RecyclerView; 
@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
      final Activity thisActivity = getActivity(); 
      final RecyclerView recyclerView = (RecyclerView)thisActivity.findViewById(R.id.my_listview); 

      final List<String> list = Arrays.asList(HEADERS); 

      final MyRecyclerAdapter adapter = new MyRecyclerAdapter(list); 
      recyclerView.setAdapter(adapter); 

} 

MyRecyclerAdapter.java

import android.support.v7.widget.RecyclerView; 

    public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> { 
     private ArrayList<String> mDataset; 

     // Provide a suitable constructor (depends on the kind of dataset) 
     public MyRecyclerAdapter(List<String> list) { 
     mDataset = (ArrayList<String>) list; 
     } 

     // Create new views (invoked by the layout manager) 
     @Override 
     public MyRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

      // create a new view 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout, parent, false); 
     // set the view's size, margins, paddings and layout parameters 
     ViewHolder vh = new ViewHolder(v); 
     return vh; 
     } 

     // Replace the contents of a view (invoked by the layout manager) 
     @Override 
     public void onBindViewHolder(ViewHolder holder, int position) { 
     // - get element from your dataset at this position 
     // - replace the contents of the view with that element 
     final String name = mDataset.get(position); 
     holder.txtId.setText(mDataset.get(position)); 
     holder.txtId.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        remove(name); 
       } 
      }); 

     holder.txtType.setText("Footer: " + mDataset.get(position)); 

     } 

     // Return the size of your dataset (invoked by the layout manager) 
     @Override 
     public int getItemCount() { 
     return mDataset.size(); 
     } 
     // Provide a reference to the views for each data item 
     // Complex data items may need more than one view per item, and 
     // you provide access to all the views for a data item in a view holder 

     public class ViewHolder extends RecyclerView.ViewHolder { 
     // each data item is just a string in this case 
     public TextView txtId; 
     public TextView txtType; 
     public TextView txtName; 

     public ViewHolder(View v) { 
      super(v); 
      txtId = (TextView) v.findViewById(R.id.id); 
      txtType = (TextView) v.findViewById(R.id.type); 
      txtName = (TextView) v.findViewById(R.id.name); 
     } 
     } 

     public void add(int position, String item) { 
     mDataset.add(position, item); 
     notifyItemInserted(position); 
     } 

     public void remove(String item) { 
     int position = mDataset.indexOf(item); 
     mDataset.remove(position); 
     notifyItemRemoved(position); 
     } 

    } 

fragment.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="match_parent" 
    android:orientation="horizontal" 
    android:background="#000000" > 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/my_listview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</RelativeLayout> 

row_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/id" 
     android:textColor="#FFFFFF" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="30sp" > 
    </TextView> 

    <TextView 
     android:id="@+id/type" 
     android:textColor="#FFFFFF" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="30sp" > 
    </TextView> 

    <TextView 
     android:id="@+id/name" 
     android:textColor="#FFFFFF" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="30sp" > 
    </TextView> 

</LinearLayout> 

Редактировать: Как предложил Арман Кабир, я проверил «Является ли библиотека». Это действительно исправляет ClassNotFoundException. Это приводит к несколько иной ошибке, но это еще одна проблема.

android.view.InflateException: Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView 
    at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 
lang.reflect.InvocationTargetException 
    at java.lang.reflect.Constructor.constructNative(Native Method) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
    ... 44 more 
Caused by: java.lang.NoClassDefFoundError: android.support.v4.util.Pools$SimplePool 
    at android.support.v7.widget.AdapterHelper.<init>(AdapterHelper.java:56) 
    at android.support.v7.widget.AdapterHelper.<init>(AdapterHelper.java:71) 
    at android.support.v7.widget.RecyclerView.initAdapterManager(RecyclerView.java:455) 
    at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:339) 
    ... 47 more 
+0

Переключить на Android-студию. –

+2

Как это решить проблему? –

ответ

7

В затмении в вашем рабочем пространстве, создать новый проект, используя существующий код, а затем выберите путь к Recycler в андроиде поддержки SDK и в свойствах выбрать компилятор Google API 20 или 21 и проверить, является библиотекой.

После этого в рабочей области выберите свой собственный проект, щелкните правой кнопкой мыши свойства и перейдите в раздел Android и в библиотеке нажмите кнопку «Добавить» и выберите проект Recycler из списка.

Далее вы должны очистить весь проект от меню проекта.

Извините, если мой английский так плохой, но его решение ура и просто добавление suuport v7 в качестве jar через ошибки, а не как v4.

1

Если вы не знаете, какой файл jar содержит класс, который вы ищете, вы можете использовать эту команду bash. В Windows вы можете запустить его, если вы установите Cygwin.

для i в find . -name \*.jar; do echo $ i; jar tvf $ i | fgrep $ *; done

Это должно найти в подкаталогах и помочь вам найти пропавший файл jar.

3

Переключение на Android Studio - лучший вариант, но проблема с рендерингом по-прежнему существует. Чтобы удалить то же самое в Android Studio, добавьте «Gradle Dependencies» в ваш модуль.

dependencies { 
... 
compile 'com.android.support:recyclerview-v7:21.0.+' 

} Надеюсь, что это помогает кому-то, как это мне помогло. Я немного изменилась, но очень раздражающе.

1

Это мое путешествие затмения, чтобы завершить проект mqtt.

Прежде всего, вам нужно проверить, существует ли библиотека поддержки, если нет, вам нужно загрузить ее с помощью диспетчера sdk.

enter image description here

Я знаю, что вы уже получили эту библиотеку. Просто проверьте каталог, в котором находится библиотека поддержки. Вы уверены, что на картинке существует четыре каталога.

enter image description here

В вашем случае вы будете иметь две основные библиотеки и AppCompat-v7 и опорно-v4, что все версии 22 или выше, по крайней мере.

В каждой папке должен быть файл aar. вам нужно изменить суффикс aar на zip, а затем разархивировать его под папку. Переименуйте оба класса.jar в appcompat-v7-22.1.0.jar и support-v4-22.1.0.jar.

Это означает, что вы готовы скопировать их в соответствующую папку libs в своем проекте.

enter image description here

вы делаете то же самое действие с обеих папок.

enter image description here

В recyclerview-v7 \ 21.0.0 папки, вы можете JUSE переименовать classes.jar в любое имени вы хотите и поддержка-аннотаций-21.0.0.jar под подставками-аннотации \ 21.0.0 \ затем скопируйте их в свою папку libs вашего проекта.

Импорт существующих андроид проектов для вашего затмения,

enter image description here

Кроме того, сделать то же самое с опорно-v4-22.1.0 библиотеки.

Не забудьте установить флажок - «Является ли библиотека»

Вы можете, наконец, установить все настройки для вашего проекта, как изображения следующим образом.

enter image description here

Это мой файл project.properties.

target=android-21 

java.target=1.7 
java.source=1.7 

android.library.reference.1=..\\MqttService 
android.library.reference.2=..\\extras\\android\\m2repository\\com\\android\\support\\appcompat-v7\\22.1.0\\appcompat-v7-22.1.0 
android.library.reference.3=..\\extras\\android\\m2repository\\com\\android\\support\\support-v4\\22.1.0\\support-v4-22.1.0 
Смежные вопросы