Jak zaimportować RecyclerView dla Androida w wersji L.

91

Próba użycia nowego RecyclerView z biblioteki pomocy technicznej. Pobrałem aktualizację 20 dla biblioteki wsparcia za pomocą menedżera SDK.

Dodałem plik jar do folderu libs - i dodałem do ścieżki kompilacji - bez powodzenia przy użyciu RecyclerView.

Próbowałem również użyć zależności gradle zgodnie z API Android Developera - nie jestem pewien, czy to jest właściwe miejsce, aby spojrzeć - ta strona jest bardziej związana z AndroidTV:

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

Nie można ocenić synchronizacji projektu.

Jakieś pomysły?

micnoy
źródło

Odpowiedzi:

84

Utworzyłem za pomocą następujących linii i to działa dla mnie.

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

W przypadku systemu AndroidX

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

Pełny samouczek można znaleźć tutaj

Gunaseelan
źródło
Błąd: nie powiodło się wykonanie zadania „: app: dexDebug”. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' / usr / lib / jvm / java-7-openjdk-amd64 / bin / java '' zakończone non -zero wartość wyjścia 2. Otrzymuję ten błąd, gdy uruchamiam projekt, gdy dodam drugą zależność do mojego projektu. proszę, napraw to ktokolwiek ??.
Ajay Bhayani
Gradle.build mojej aplikacji ma już kompilację „com.android.support:appcompat-v7:23.2.1”. Próbowałem więc dodać kompilację „com.android.support:recyclerview-v7:23.2.1” - ta sama wersja z appcompat, ale synchronizacja gradle nie powiodła się, próbowałem zmienić na „+” jak „com.android.support: recyclinglerview-v7: 23.2. + ', też nie powiodło się :(
Andiana
164

Domyśliłam się.

Będziesz musiał dodać następującą zależność gradle:

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

innym problemem, który miałem podczas kompilacji, był plik compileSdkVersion. Najwyraźniej będziesz musiał to skompilowaćandroid-L

Twój plik build.gradle powinien wyglądać mniej więcej tak:

apply plugin: 'android'
android {
    compileSdkVersion 'android-L'
    buildToolsVersion '19.1.0'
    [...]
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:recyclerview-v7:+'
}
micnoy
źródło
2
compileSdkVersion 'android-L' - daje INSTALL_FAILED_OLDER_SDK
Oleksii Malovanyi
4
Jak to robisz z Eclipse?
programista Androida,
2
ten post na reddicie zaprowadził mnie nieco dalej po otrzymaniu błędu INSTALL_FAILED_OLDER_SDK.
Oren,
7
Dlaczego biblioteka wsparcia miałaby być zależna od najnowszej wersji Androida? To podważa cały cel posiadania biblioteki wsparcia.
Christopher Perry,
2
Jeśli chcesz kompilować na starszą wersję Androida, możesz. Aby pozbyć się błędu INSTALL_FAILED_OLDER_SDK, musisz zamienić swoją <uses-sdk />deklarację w pliku AndroidManifest.xml na:<uses-sdk tools:node="replace" />
Christopher Perry
9

To działa dla mnie:

compile 'com.android.support:recyclerview-v7:21.0.0-rc1'
Andras K.
źródło
1
to nie jest problem, to, co napisałeś, to tylko kolejna wersja tego, co już
załączył
7

RecyclerView można teraz dodać, kompilując zależność projektu w aplikacji Gradle:

dependencies {
...
compile 'com.android.support:design:24.0.0'
}
Bryon Nicoson
źródło
1
dla tych, którzy negatywnie ocenili github.com/android/platform_frameworks_support/blob/master/ ... tutaj możesz to zobaczyć
Lubos Mudrak
4

Jeśli masz skompilowany zestaw SDK w wersji 22.2.0, dodaj poniżej zależności dla widoku recyklera i widoku karty dodatkowe w celu obsługi cardView

// do włączenia całej biblioteki do katalogu lib
compile fileTree(include: ['*.jar'], dir: 'libs')
// do obsługi appcompat
compile 'com.android.support:appcompat-v7:22.2.0'
// do uwzględnienia projektu pomocy Google (umożliwia implementację motywu Material Design od 2.3 i nowszych)
`compile 'com.android.support:design:22.2. 0 '

w celu dodania widoku recyklera użyj po zależności
compile 'com.android.support:recyclerview-v7:22.2.0'


Następnie kliknij Build-> przebuduj projekt i gotowe.

yubaraj poudel
źródło
3
compile 'com.android.support:recyclerview-v7:24.2.1'

To działa dla mnie. Spróbuj.

Dino Sunny
źródło
2

W krokach przede mną brakuje tylko jednego kroku.

Po zmianie build.gradle (Module: app) i dodaniu następujących zależności:

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

(W razie potrzeby dodaj widok karty)

Następnie musisz przejść do Build> Clean Project, aby pozbyć się błędów

LJ Hazel
źródło
Dzięki człowiekowi, od wielu godzin walczyłem ze studiem Android, twój pomysł na Clean Project sprawił, że tak się stało. Jeszcze raz dziękuję.
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'
}

Po prostu spraw, aby twoje zależności jak powyżej w pliku build.gradle działały dla mnie.

yubaraj poudel
źródło
2

w moim przypadku naprawiłem to, compile 'com.android.support:recyclerview-v7:22.0.0'dodając jako zależność do mojej kompilacji gradle

(z Android Studio v. 1.2.1.1 i zaktualizowanymi wszystkimi pakietami SDK).

To naprawdę denerwujące, gdy kody są aktualizowane tak szybko, a IDE nie może ich śledzić, i musisz ręcznie je naprawić, marnując czas i zasoby.

Ale cóż, w końcu działa.

Samuele Bolognini
źródło
2

Uwzględnij zależność w build.gradlei zsynchronizuj projekt z gradleplikami

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'
}

Dołącz wersję (tutaj jest to 25.1.1), aby uniknąć nieprzewidywalnych kompilacji, sprawdź wersje bibliotek

Azzy
źródło
2
implementation 'com.android.support:appcompat-v7:28.0.0'

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

Powyższe działa dla mnie w build.gradleaktach

Vaibhav Thakur
źródło
1

Użyłem małego hacka, aby użyć RecyclerView na starszych urządzeniach. Po prostu wszedłem do mojego lokalnego repozytorium m2 i podniosłem pliki źródłowe RecyclerView i umieściłem je w moim projekcie.

Możesz znaleźć kod źródłowy tutaj:

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

rekire
źródło
1

Inne odpowiedzi mi nie pomogły. Musiałem dodać tę linię:

kompiluj „com.android.support:recyclerview-v7:21.0.0”

Chad Bingham
źródło
1

-Przejdź do części DESIGN w activity_main.xml -W palecie drag drop wybierz appCompactivity -W appCompactivity Select RecyclerView -Wyboru pojawi się okno dialogowe kliknij OK -Twoja aplikacja projektu: gradle zostanie automatycznie zaktualizowany

Vishal Singh
źródło
1

Moje zależności;

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'
}

Dodałem tylko kompilację „com.android.support:recyclerview-v7:25.1.0” . Ważną rzeczą jest dodanie zależności RecycleView, która jest w tej samej wersji co appcompat

Günay Gültekin
źródło
1

Jeśli używasz zaktualizowanej lub 2018 wersji dla Android Studio ...

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

wyświetli błąd z następującym komunikatem „Konfiguracja 'kompilacja' jest przestarzała i została zastąpiona przez 'implementację' i 'api'. Zostanie usunięta pod koniec 2018 roku.”

Spróbuj tego użyć

implementation 'com.android.support:recyclerview-v7:+'
TwistenTiger
źródło
1

Użyłem tego, który działa dla mnie. Należy wziąć pod uwagę, jakiej appcompatwersji używasz. Używam, appcompat-v7:26.+więc to działa dla mnie.

implementation 'com.android.support:recyclerview-v7:26.+'
Vicky Pramanik
źródło
0

Świetnym sposobem na zaimportowanie RecyclerView do projektu jest RecyclerViewLib . To jest biblioteka open source, która wyciągnęła RecyclerView, aby uczynić ją bezpieczną i łatwą do wdrożenia. Możesz przeczytać wpis na blogu autora tutaj .

Dodaj następujący wiersz jako zależność gradle w kodzie:

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

Więcej informacji o tym, jak wprowadzić zależności gradle:

Bośnia, masz rację, że to denerwujące. Gradle może wydawać się skomplikowany, ale jest niezwykle potężny i elastyczny. Wszystko odbywa się w świetnym języku, a nauka systemu gradle polega na nauce innego języka, abyś mógł zbudować swoją aplikację na Androida. Teraz boli, ale na dłuższą metę pokochasz to.

Sprawdź build.gradle dla tej samej aplikacji. https://github.com/twotoasters/RecyclerViewLib/blob/master/sample/build.gradle Gdzie wykonuje następujące czynności, przenosi bibliotekę do modułu (aka przykładową aplikację)

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

Zwróć uwagę na lokalizację tego pliku. To nie jest build.gradle najwyższego poziomu

Ponieważ źródło lib znajduje się w tym samym projekcie, można to zrobić za pomocą prostego ':library'. excludeOpowiada lib do korzystania z pomocy V4 aplikacji próbki. Nie jest to konieczne, ale to dobry pomysł. Nie masz lub nie chcesz mieć źródła lib w swoim projekcie, więc musisz wskazać dla niego Internet. W pliku build.gradle modułu / aplikacji umieściłbyś tę linię z początku tej odpowiedzi w tej samej lokalizacji. Lub, jeśli idąc za przykładem próbek, można wymienić ':library'z ' com.twotoasters.RecyclerViewLib:library:1.0.+@aar 'i użyj wykluczeń.

MinceMan
źródło
mam ten błąd:: Could not find any version that matches com.twotoasters.RecyclerViewLib:library:1.0.+- /
Besnik
Czy umieszczasz go we właściwym miejscu w swoim build.gradle? Czy umieszczasz to w swoich modułach build.gradle?
MinceMan
gdzie jest „właściwe” miejsce? Właśnie dodałem te linie do mojego build.gradle, umieściłem go na zewnątrz / wewnątrz z Androida {}, wewnątrz / na zewnątrz z buildscript {}, ale nic nie działało. Jestem nowy w gradle i wydaje mi się, że jest to bardzo skomplikowane ... a kiedy czytam coś w stylu "po prostu wstaw tę linię ..." to bardzo irytujące ... :-(
Besnik
1
@Besnik Zaktualizowałem moją odpowiedź o więcej informacji o systemie budowania ocen. Mam nadzieję, że te informacje są pomocne.
MinceMan
Dziękuję Ci! Spróbuję w najbliższych dniach :-)
Besnik
0
import android.support.v7.widget.RecyclerView;

W Android Studio importowanie nie jest tak intuicyjne, jak można by oczekiwać. Spróbuj zaimportować ten bit i zobacz, jak to pomaga!

AlleyOOP
źródło
Pytanie dotyczyło zależności Gradle, a nie importu Java.
OneCricketeer
0

Jeśli ktoś nadal ma ten problem - nie musisz zmieniać compileSdkVersion, to po prostu podważa cały cel obsługi bibliotek.

Zamiast tego użyj tych w swoim gradle.buildpliku:

compile 'com.android.support:cardview-v7:+'
compile 'com.android.support:recyclerview-v7:+'
compile 'com.android.support:palette-v7:+'`
andrejbroncek
źródło
1
Nie zaleca się używania notacji +, przynajmniej określ wersję główną.
Dejan
0

To działa dla mnie

Zdefiniuj uprawnienia internetowe

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

Dodaj zależność

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'
    }

W głównej działalności

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();
            }
        });

    }
}

Utwórz klasę 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;
    }
}

Make Food.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;
    }
}

W 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>
Sakshi Mehta
źródło
0

Tylko aktualizacja:

„kompilacja” jest teraz przestarzała; został zastąpiony przez „implementację” i „api”. Myślę, że zostanie usunięty pod koniec 2018 roku. Więcej informacji można znaleźć pod adresem : http://d.android.com/r/tools/update-dependency-configurations.html

Ponadto wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji; ponadto biblioteki obsługujące, takie jak appcompat-v7 i recyclinglerview-v7, nie powinny używać innej wersji niż compileSdkVersion.

Czy byłem
źródło