Як імпортувати RecyclerView для Android L-preview


90

Спроба використовувати новий RecyclerView з бібліотеки підтримки. Я завантажив оновлення 20 для бібліотеки підтримки за допомогою менеджера SDK.

Я додав файл jar до папки libs - і додав до шляху побудови - не вдало використовувати RecyclerView.

Спробував також використовувати залежність gradle відповідно до API розробника Android - не впевнений, що це правильне місце для пошуку - ця сторінка більше пов’язана з AndroidTV:

 com.android.support:recyclerview-v7:20.0.+

Не вдається gradle синхронізувати проект.

Будь-які ідеї?

Відповіді:


82

Я створив, використовуючи наступні рядки, і це працює для мене.

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'

Для AndroidX

implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'

Повний посібник див. Тут


Помилка: Помилка виконання для завдання ': app: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Процес 'command' / usr / lib / jvm / java-7-openjdk-amd64 / bin / java '' закінчено без -нульове значення виходу 2.. я отримую цю помилку під час запуску проекту, коли додаю 2-ю залежність у своєму проекті. будь ласка, виправте це будь-який ??.
Аджай Бхайяні

Gradle.build мого додатка вже скомпілював 'com.android.support:appcompat-v7:23.2.1'. Тому я спробував додати компіляцію 'com.android.support:recyclerview-v7:23.2.1' - ту саму версію з appcompat, але не вдалося синхронізувати gradle, спробував змінити на "+", наприклад "com.android.support: recyclerview-v7: 23.2. + ', теж не вдалося :(
Andiana

164

Розібрався.

Вам доведеться додати таку залежність gradle:

compile 'com.android.support:recyclerview-v7:+'

ще одне питання, яке я збирав, - compileSdkVersion. Очевидно, вам доведеться скласти його протиandroid-L

Ваш файл build.gradle повинен виглядати приблизно так:

apply plugin: 'android'
android {
    compileSdkVersion 'android-L'
    buildToolsVersion '19.1.0'
    [...]
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:recyclerview-v7:+'
}

2
compileSdkVersion 'android-L' - дає INSTALL_FAILED_OLDER_SDK
Олексій Мальований

4
Як це зробити за допомогою Eclipse?
розробник android

2
ця публікація в reddit привела мене трохи далі після отримання помилки INSTALL_FAILED_OLDER_SDK.
Орен

7
Чому бібліотека підтримки буде залежати від останньої версії Android? Це перешкоджає цілі створення бібліотеки підтримки.
Крістофер Перрі,

2
Якщо ви хочете скомпілювати попередню версію Android, ви можете. Для того, щоб позбутися помилки INSTALL_FAILED_OLDER_SDK, вам потрібно замінити <uses-sdk />декларацію у файлі AndroidManifest.xml на:<uses-sdk tools:node="replace" />
Крістофер Перрі

9

Це працює для мене:

compile 'com.android.support:recyclerview-v7:21.0.0-rc1'

1
справа не в цьому, написане вами - це лише чергова версія того, що він вже включив
AlleyOOP


4

Якщо ви скомпілювали SDK версії 22.2.0, додайте нижче залежність для перегляду утилізатора та перегляду картки додатково для підтримки cardView

// для включення всієї бібліотеки в каталог lib
compile fileTree(include: ['*.jar'], dir: 'libs')
// для підтримки appcompat
compile 'com.android.support:appcompat-v7:22.2.0'
// для включення дизайну підтримки Google (це дозволяє реалізувати тему дизайну матеріалів з версії 2.3 і вище)
`compile 'com.android.support:design:22.2. 0 '

для додавання подання переглядача використовуйте наступні залежності
compile 'com.android.support:recyclerview-v7:22.2.0'


Після цього натисніть Build-> rebuild project, і все готово.



2

Кроки переді мною лише одного кроку не вистачає.

Змінивши build.gradle (Модуль: додаток) і додавши такі залежності:

компілювати 'com.android.support:cardview-v7:21.0.+'
компілювати 'com.android.support:recyclerview-v7:21.0.+'

(За потреби додайте перегляд картки)

Потім ви повинні перейти до Build> Clean Project щоб позбутися будь-яких помилок


Дякую, я багато годин боровся зі студією Android, ваша ідея Clean Project все зробила, ще раз спасибі.
Diljeet

2
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.0'
}

Просто зробіть свої залежності, як зазначено вище, у файлі build.gradle, який працював у мене.


2

у моєму випадку я це виправив, поставивши compile 'com.android.support:recyclerview-v7:22.0.0' як залежність у мою побудову gradle

(з Android studio v. 1.2.1.1 та всіми оновленими sdk.)

Це справді дратує, коли коди оновлюються так швидко, і IDE не може їх відстежувати, і вам доведеться вручну виправляти їх, витрачаючи час і ресурси.

Але добре, нарешті це працює.


2

включити залежність у файл build.gradleта синхронізувати проект із gradleфайлами

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:25.1.0'

    //include the revision no, i.e 25.1.1
    implementation 'com.android.support:recyclerview-v7:25.1.1'
}

Включіть ревізію (тут її 25.1.1), щоб уникнути непередбачуваних збірок, перевірте версії бібліотеки


2
implementation 'com.android.support:appcompat-v7:28.0.0'

implementation 'com.android.support:recyclerview-v7:28.0.0'

Вище працює для мене у build.gradleфайлі


1

Я використав невеликий хакер, щоб використовувати RecyclerView на старих пристроях. Я просто зайшов у своє місцеве сховище m2, взяв вихідні файли RecyclerView і помістив їх у свій проект.

Ви можете знайти вихідний код тут:

<Android-SDK> \ extras \ android \ m2repository \ com \ android \ support \ recyclerview-v7 \ 21.0.0-rc1 \ recyclerview-v7-21.0.0-rc1-sources.jar


1

Інші відповіді у мене не спрацювали. Мені довелося додати цей рядок:

компілювати 'com.android.support:recyclerview-v7:21.0.0'


1

-Go до КОНСТРУКЦІЇ частини в activity_main.xml -В перетягування піддону виберіть appCompactivityappCompactivity Виберіть RecyclerView Вибір -вона діалог повинен з'явитися натисніть OK додаток проекту -Ваш: Gradle буде автоматично оновлюватися


1

Мої залежності;

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:25.1.0'

    //RecyclerView dependency
    compile 'com.android.support:recyclerview-v7:25.1.0'

    // Instrumentation dependencies use androidTestCompile
    // (as opposed to testCompile for local unit tests run in the JVM)
    androidTestCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support:support-annotations:25.1.0'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'
}

Я додав лише компіляцію 'com.android.support:recyclerview-v7:25.1.0' . Найголовніше - додати залежність RecycleView, яка така ж версія, як appcompat


1

Якщо ви використовуєте оновлену версію або версію 2018 року для Android Studio ...

compile 'com.android.support:recyclerview-v7:+'

видасть вам повідомлення про помилку з наступним повідомленням: "Конфігурація" компіляція "застаріла і була замінена на" реалізація "та" api ". Її буде видалено в кінці 2018 року."

Спробуйте скористатися цим

implementation 'com.android.support:recyclerview-v7:+'

1

Я використовував цей, який працює на мене. Одне потрібно враховувати, яку appcompatверсію ви використовуєте. Я використовую, appcompat-v7:26.+тому це працює на мене.

implementation 'com.android.support:recyclerview-v7:26.+'

0

Чудовим способом імпорту RecyclerView у ваш проект є RecyclerViewLib . Це бібліотека з відкритим кодом, яка витягнула RecyclerView, щоб зробити його безпечним та простим. Прочитати допис у блозі автора можна тут .

Додайте наступний рядок як залежність gradle у своєму коді:

dependencies {
    compile 'com.twotoasters.RecyclerViewLib:library:1.0.+@aar'
}

Докладніше про те, як залучити залежності gradle:

Боснія, ти маєш рацію щодо того, що це дратує. Gradle може здатися складним, але він надзвичайно потужний та гнучкий. Все робиться мовою groovy, а вивчення системи gradle - це вивчення іншої мови, щоб ви могли створити свій додаток для Android. Зараз боляче, але з часом вам це сподобається.

Перевірте build.gradle для того самого додатка. https://github.com/twotoasters/RecyclerViewLib/blob/master/sample/build.gradle Там, де це робиться, нижче відбувається введення бібліотеки в модуль (він же зразок програми)

compile (project (':library')) {
    exclude group: 'com.android.support', module: 'support-v4' 
}

Зверніть увагу на розташування цього файлу. Це не верхній рівень build.gradle

Оскільки джерело lib знаходиться в одному проекті, він може це зробити за допомогою простого ':library'. Тест excludeповідомляє lib використовувати зразки підтримки програми v4. Це не потрібно, але це гарна ідея. Ви не маєте або не хочете мати джерело бібліотеки у своєму проекті, тому вам доведеться вказати на Інтернет для цього. У build.gradle вашого модуля / програми ви розмістите цей рядок з початку цієї відповіді в тому ж місці. Або, якщо , наслідуючи приклад зразків, можна замінити ':library'з ' com.twotoasters.RecyclerViewLib:library:1.0.+@aar 'і використовувати виключає.


я отримав цю помилку:: Could not find any version that matches com.twotoasters.RecyclerViewLib:library:1.0.+- /
Бесник

Ви ставите його в потрібному місці у вашому build.gradle? Ви поміщаєте його у свої модулі build.gradle?
MinceMan

де "правильне" місце? я просто додав ці рядки до мого build.gradle, розмістив його зовні / всередині від android {}, всередині / зовні від buildscript {}, але у мене нічого не вийшло. я новачок у gradle, і здається, це дуже складно ... і коли я читаю щось на кшталт "просто постав цей рядок ...", це дуже дратує ... :-(
Бесник,

1
@Besnik Я оновив свою відповідь додатковою інформацією про систему складання оцінок. Я сподіваюся, що інформація буде корисною.
MinceMan

спасибі! я спробую найближчими днями :-)
Бесник

0
import android.support.v7.widget.RecyclerView;

В Android Studio імпорт не такий інтуїтивний, як можна було б сподіватися. Спробуйте імпортувати цей біт і подивіться, як він допомагає!


Питання було про залежність Gradle, а не про імпорт Java.
OneCricketeer

0

Якщо хтось все ще має цю проблему - вам не потрібно міняти compileSdkVersion , це просто перешкоджає цілі підтримки бібліотек підтримки.

Натомість використовуйте їх у своєму gradle.buildфайлі:

compile 'com.android.support:cardview-v7:+'
compile 'com.android.support:recyclerview-v7:+'
compile 'com.android.support:palette-v7:+'`

1
Не рекомендується використовувати позначення +, принаймні вказати основну версію.
Деян

0

Це працює для мене

Визначте дозвіл в Інтернеті

 <uses-permission android:name="android.permission.INTERNET" >

Додати залежність

compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile ('com.squareup.retrofit2:converter-simplexml:2.1.0'){
        exclude group: 'stax', module: 'stax-api'
        exclude group: 'stax', module: 'stax'
        exclude group: 'xpp3', module: 'xpp3'
    }

В Основній діяльності

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.simplexml.SimpleXmlConverterFactory;

public class MainActivity extends AppCompatActivity {
    private BreakfastMenu breakfastMenu;
    List<BreakfastMenu> list;
    TextView responseText;
    APIInterface apiInterface;
    String name;
    String price;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        responseText=(TextView)findViewById(R.id.reponseText);
        apiInterface = APIClient.getClient().create(APIInterface.class);


        /**
         GET List Resources
         **/
        Call<BreakfastMenu> call = apiInterface.getBreakfastMenu();
        call.enqueue(new Callback<BreakfastMenu>() {
            @Override
            public void onResponse(Call<BreakfastMenu> call, Response<BreakfastMenu> response) {
               Log.d("TAG", response.code() + "");

                String displayResponse = "";
                BreakfastMenu resource = response.body();
                System.out.println(displayResponse+"display response   ");

                for (Food food : resource.getFoodList())
                {
                    name=food.getName();
                    price=food.getPrice();
                    System.out.println(name+price+"=========================================");
                    displayResponse += food.getName() + " " + food.getPrice()+"\n"+"\n";
                    Toast.makeText(MainActivity.this,name+price,Toast.LENGTH_LONG).show();
                }
                responseText.setText(displayResponse);

            }

            @Override
            public void onFailure(Call<BreakfastMenu> call, Throwable t) {
                call.cancel();
            }
        });

    }
}

Зробіть клас APIClient.java

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.simplexml.SimpleXmlConverterFactory;

class APIClient {

    private static Retrofit retrofit = null;

    static Retrofit getClient() {

        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();


        retrofit = new Retrofit.Builder()
                .baseUrl("https://www.w3schools.com/")
                .addConverterFactory(SimpleXmlConverterFactory.create())
                .build();



        return retrofit;
    }

}

    enter code here

Make APIInterface.java

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;

interface APIInterface {

    @GET("xml/simple.xml")
    @Headers({"Accept: application/xml",
            "User-Agent: Retrofit-Sample-App"})
    Call<BreakfastMenu> getBreakfastMenu();
}

In BreakfastMenu.java

import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

import java.util.List;

@Root(name = "breakfast_menu")
public class BreakfastMenu
{

    @ElementList(inline = true)
    private List<Food> foodList;

    public BreakfastMenu()
    {
    }

    public List<Food> getFoodList()
    {
        return foodList;
    }

    public void setFoodList(List<Food> foodList)
    {
        this.foodList = foodList;
    }
}

Зробити їжу.java

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root(name = "food")
public class Food
{

    @Element(name = "name")
    private String name;

    @Element(name = "price")
    private String price;

    @Element(name = "description")
    private String description;

    @Element(name = "calories")
    private String calories;

    public Food()
    {
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getPrice()
    {
        return price;
    }

    public void setPrice(String price)
    {
        this.price = price;
    }

    public String getDescription()
    {
        return description;
    }

    public void setDescription(String description)
    {
        this.description = description;
    }

    public String getCalories()
    {
        return calories;
    }

    public void setCalories(String calories)
    {
        this.calories = calories;
    }
}

У Activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

        <TextView
            android:id="@+id/reponseText"
            android:layout_width="match_parent"
            android:layout_height="600dp"
          />


</Linear Layout>

0

Просто оновлення:

"компіляція" застаріла; його замінено на "імплементація" та "api". Я вважаю, що його буде видалено в кінці 2018 року. Для отримання додаткової інформації див. http://d.android.com/r/tools/update-dependency-configurations.html

Також усі бібліотеки com.android.support повинні використовувати точно однакову специфікацію версії; крім того, бібліотеки підтримки, такі як appcompat-v7 та recyclerview-v7, не повинні використовувати іншу версію, ніж compileSdkVersion.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.