So importieren Sie RecyclerView für Android L-Vorschau


90

Versuch, die neue RecyclerView aus der Support-Bibliothek zu verwenden. Ich habe das 20-Update für die Support-Bibliothek mit dem SDK-Manager heruntergeladen.

Ich habe die JAR-Datei zum libs-Ordner hinzugefügt - und zum Erstellungspfad hinzugefügt - kein Glück mit RecyclerView.

Versucht, auch die Gradle-Abhängigkeit gemäß der API des Android-Entwicklers zu verwenden - nicht sicher, ob dies der richtige Ort ist - diese Seite hat mehr mit AndroidTV zu tun:

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

Das Projekt kann nicht gradle synchronisiert werden.

Irgendwelche Ideen?

Antworten:


82

Ich habe mit folgenden Zeilen erstellt und dies funktioniert für mich.

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

Für AndroidX

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

Das vollständige Tutorial finden Sie hier


Fehler: Ausführung für Task ': app: dexDebug' fehlgeschlagen. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Prozess 'Befehl' / usr / lib / jvm / java-7-openjdk-amd64 / bin / java '' mit non beendet -zero Exit-Wert 2. Ich erhalte diesen Fehler, wenn ich ein Projekt ausführe, wenn ich meinem Projekt die zweite Abhängigkeit hinzufüge. Bitte reparieren Sie es?
Ajay Bhayani

In gradle.build meiner App wurde bereits 'com.android.support:appcompat-v7:23.2.1' kompiliert. Also habe ich versucht, die Kompilierung 'com.android.support:recyclerview-v7:23.2.1' hinzuzufügen - dieselbe Version mit Appcompat, aber die Gradle-Synchronisierung war fehlgeschlagen. Ich habe versucht, wie 'com.android.support' auf "+" zu wechseln: recyclerview-v7: 23.2. + ', auch fehlgeschlagen :(
Andiana

164

Herausgefunden.

Sie müssen die folgende Gradle-Abhängigkeit hinzufügen:

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

Ein weiteres Problem, das ich beim Kompilieren hatte, war das compileSdkVersion. Anscheinend müssen Sie es dagegen kompilierenandroid-L

Ihre build.gradle-Datei sollte ungefähr so ​​aussehen:

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' - gibt INSTALL_FAILED_OLDER_SDK
Oleksii Malovanyi

4
Wie machst du das mit Eclipse?
Android-Entwickler

2
Dieser reddit-Beitrag hat mich ein bisschen weiter gebracht, nachdem ich den INSTALL_FAILED_OLDER_SDK-Fehler erhalten habe.
Oren

7
Warum sollte eine Support-Bibliothek von der neuesten Version von Android abhängig sein? Das macht den gesamten Zweck einer Support-Bibliothek zunichte.
Christopher Perry

2
Wenn Sie gegen eine ältere Version von Android kompilieren möchten, können Sie. Um den INSTALL_FAILED_OLDER_SDK-Fehler zu beseitigen, müssen Sie Ihre <uses-sdk />Deklaration in Ihrer AndroidManifest.xml-Datei durch Folgendes ersetzen :<uses-sdk tools:node="replace" />
Christopher Perry

9

Das funktioniert bei mir:

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

1
das ist nicht das Problem, was Sie geschrieben haben, ist nur eine andere Version von dem, was er bereits aufgenommen hat
AlleyOOP


4

Wenn Sie SDK Version 22.2.0 kompiliert haben, fügen Sie unten die Abhängigkeit für die Recycler-Ansicht und die Kartenansicht hinzu, um cardView zu unterstützen

// für die Aufnahme der gesamten Bibliothek in das Verzeichnis lib
compile fileTree(include: ['*.jar'], dir: 'libs')
// für die Unterstützung appcompat
compile 'com.android.support:appcompat-v7:22.2.0'
// für die Aufnahme von Google Support Design (es ermöglicht die Implementierung eines Materialdesign-Themas ab 2.3)
`compile 'com.android.support:design:22.2. 0 '

Verwenden Sie zum Hinzufügen der Recycler-Ansicht die folgende Abhängigkeit
compile 'com.android.support:recyclerview-v7:22.2.0'


Danach klicken Sie auf Build-> Projekt neu erstellen und Sie sind fertig.


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

Das funktioniert bei mir. Versuch es.


2

Den Schritten vor mir fehlt nur ein Schritt.

Nach dem Ändern der build.gradle (Modul: App) und dem Hinzufügen der folgenden Abhängigkeiten:

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

(Bei Bedarf Kartenansicht hinzufügen)

Sie müssen dann zu Build> Clean Project gehen, um alle Fehler zu beseitigen


Vielen Dank, ich hatte seit vielen Stunden Probleme mit Android Studio. Ihre Idee für ein sauberes Projekt hat es geschafft. Nochmals vielen Dank.
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'
}

Machen Sie einfach Ihre Abhängigkeiten wie oben in der Datei build.gradle, die für mich funktioniert hat.


2

In meinem Fall habe ich das compile 'com.android.support:recyclerview-v7:22.0.0'Problem behoben, indem ich es als Abhängigkeit in meinen Gradle-Build eingefügt habe

(mit Android Studio v. 1.2.1.1 und allen aktualisierten SDKs.)

Es ist wirklich ärgerlich, wenn Codes so schnell aktualisiert werden und die IDE sie nicht verfolgen kann und Sie sie manuell reparieren müssen, was Zeit und Ressourcen verschwendet.

Aber endlich funktioniert es.


2

Nehmen Sie die Abhängigkeit in das auf build.gradleund synchronisieren Sie das Projekt mit gradleDateien

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

Fügen Sie die Revision (hier 25.1.1) hinzu, um unvorhersehbare Builds zu vermeiden. Überprüfen Sie die Bibliotheksrevisionen


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

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

Oben funktioniert für mich in build.gradleDatei


1

Ich habe einen kleinen Hack verwendet, um RecyclerView auf älteren Geräten zu verwenden. Ich bin gerade in mein lokales m2-Repository gegangen und habe die RecyclerView-Quelldateien aufgenommen und in mein Projekt eingefügt.

Den Quellcode finden Sie hier:

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


1

Andere Antworten haben bei mir nicht funktioniert. Ich musste diese Zeile hinzufügen:

kompiliere 'com.android.support:recyclerview-v7:21.0.0'


1

- Gehen Sie zum DESIGN- Teil in activity_main.xml. - Wählen Sie in der Drag-Drop-Palette appCompactivity aus. - In appCompactivity wählen Sie RecyclerView. - Bei der Auswahl wird ein Dialogfeld angezeigt. Klicken Sie auf OK. - Ihre Projekt-App: gradle wird automatisch aktualisiert


1

Meine Abhängigkeiten;

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

Ich habe nur compile 'com.android.support:recyclerview-v7:25.1.0' hinzugefügt . Wichtig ist, dass Sie die RecycleView-Abhängigkeit hinzufügen, die dieselbe Version wie appcompat hat


1

Wenn Sie die aktualisierte oder 2018-Version für Android Studio verwenden ...

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

Sie erhalten eine Fehlermeldung mit der folgenden Meldung: "Konfiguration 'Kompilieren' ist veraltet und wurde durch 'Implementierung' und 'API' ersetzt. Sie wird Ende 2018 entfernt."

Versuchen Sie dies zu verwenden

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

1

Ich habe diesen benutzt, der für mich arbeitet. Eine Sache muss berücksichtigt werden, welche appcompatVersion Sie verwenden. Ich benutze, appcompat-v7:26.+also funktioniert das für mich.

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

0

Eine gute Möglichkeit, RecyclerView in Ihr Projekt zu importieren, ist die RecyclerViewLib . Dies ist eine Open-Source-Bibliothek, die RecyclerView herausgezogen hat, um die Implementierung sicher und einfach zu gestalten. Sie können den Blog - Eintrag des Autors lesen Sie hier .

Fügen Sie die folgende Zeile als Gradle-Abhängigkeit in Ihren Code ein:

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

Weitere Informationen zum Einfügen von Gradle-Abhängigkeiten:

Bosnien, Sie haben Recht damit, dass das nervt. Gradle mag kompliziert erscheinen, ist aber äußerst leistungsfähig und flexibel. Alles wird in der Sprache groovy gemacht und das Erlernen des Gradle-Systems lernt eine andere Sprache, nur damit Sie Ihre Android-App erstellen können. Es tut jetzt weh, aber auf lange Sicht wirst du es lieben.

Schauen Sie sich das build.gradle für dieselbe App an. https://github.com/twotoasters/RecyclerViewLib/blob/master/sample/build.gradle Im Folgenden wird die Bibliothek in das Modul gebracht (auch bekannt als Beispiel-App).

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

Achten Sie auf den Speicherort dieser Datei. Dies ist nicht das build.gradle der obersten Ebene

Da sich die lib-Quelle im selben Projekt befindet, ist dies mit dem einfachen möglich ':library'. Das excludeweist die Bibliothek an, die Unterstützung v4 der Beispiel-App zu verwenden. Das ist nicht nötig, aber eine gute Idee. Sie haben oder möchten nicht die Quelle der Bibliothek in Ihrem Projekt haben, daher müssen Sie dafür auf das Internet verweisen. Im build.gradle Ihres Moduls / Ihrer App würden Sie diese Zeile vom Anfang dieser Antwort an dieselbe Stelle setzen. Oder, wenn die Proben Beispiel folgende, könnten Sie ersetzen ':library'mit ' com.twotoasters.RecyclerViewLib:library:1.0.+@aar 'und umfasst nicht verwenden.


Ich habe diesen Fehler bekommen Could not find any version that matches com.twotoasters.RecyclerViewLib:library:1.0.+
Besnik

Platzieren Sie es an der richtigen Stelle in Ihrem build.gradle? Fügen Sie es in Ihre Module build.gradle ein?
MinceMan

Wo ist der "richtige" Ort? Ich habe diese Zeilen einfach an mein build.gradle angehängt, sie außerhalb / innen von Android {}, innen / außen von Buildscript {} platziert, aber für mich hat nichts funktioniert. Ich bin neu in Gradle und es scheint sehr überkompliziert zu sein ... und wenn ich etwas wie "Setze einfach diese Zeile ..." lese, ist es sehr ärgerlich ... :-(
Besnik

1
@Besnik Ich habe meine Antwort mit weiteren Informationen zum Grade Build System aktualisiert. Ich hoffe, dass Informationen hilfreich sind.
MinceMan

Danke! Ich werde es in den nächsten Tagen versuchen :-)
Besnik

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

In Android Studio ist das Importieren nicht so intuitiv, wie man es sich erhoffen würde. Versuchen Sie, dieses Bit zu importieren und sehen Sie, wie es hilft!


Die Frage betraf die Gradle-Abhängigkeit, nicht den Java-Import.
OneCricketeer

0

Wenn noch jemand dieses Problem hat - Sie müssen es nicht ändern compileSdkVersion, wird dadurch nur der gesamte Zweck der Support-Bibliotheken zunichte gemacht.

Verwenden Sie stattdessen diese in Ihrer gradle.buildDatei:

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

1
Es wird nicht empfohlen, die + Notation zu verwenden, zumindest die Hauptversion anzugeben.
Dejan

0

Das funktioniert bei mir

Internetberechtigung definieren

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

Abhängigkeit hinzufügen

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

In der Hauptaktivität

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

    }
}

Machen Sie die APIClient.java-Klasse

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

Machen Sie 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;
    }
}

In 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

Nur ein Update:

'compile' ist jetzt veraltet; Es wurde durch "Implementierung" und "API" ersetzt. Ich glaube, es wird Ende 2018 entfernt. Weitere Informationen finden Sie unter: http://d.android.com/r/tools/update-dependency-configurations.html

Außerdem müssen alle com.android.support-Bibliotheken genau dieselbe Versionsspezifikation verwenden. Darüber hinaus sollten Unterstützungsbibliotheken wie appcompat-v7 und recyclerview-v7 keine andere Version als compileSdkVersion verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.