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?

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


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

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'

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

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.


3
compile 'com.android.support:recyclerview-v7:24.2.1'

To działa dla mnie. Spróbuj.


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


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.


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.


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


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


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


1

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

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


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


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


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:+'

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.+'

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ń.


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!


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:+'`

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>

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.