วิธีการนำเข้า RecyclerView สำหรับ Android L-preview


91

พยายามใช้ RecyclerView ใหม่จากไลบรารีการสนับสนุน ฉันดาวน์โหลดการอัปเดต 20 สำหรับไลบรารีการสนับสนุนโดยใช้ตัวจัดการ SDK

ฉันได้เพิ่มไฟล์ jar ลงในโฟลเดอร์ libs - และเพิ่มเพื่อสร้างเส้นทาง - ไม่มีโชคในการใช้ RecyclerView

พยายามใช้การพึ่งพาการไล่ระดับตามAPI ของนักพัฒนา Android - ไม่แน่ใจว่านี่คือที่ที่ถูกต้องหรือไม่ - หน้านี้เกี่ยวข้องกับ AndroidTV มากขึ้น:

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

ไม่สามารถค่อยๆซิงค์โปรเจ็กต์

ความคิดใด ๆ ?

คำตอบ:


84

ฉันได้สร้างโดยใช้บรรทัดต่อไปนี้และสิ่งนี้ใช้ได้กับฉัน

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: Process 'command' / usr / lib / jvm / java-7-openjdk-amd64 / bin / java '' เสร็จสิ้นด้วย non -zero exit ค่า 2 ฉันได้รับข้อผิดพลาดนี้เมื่อฉันรันโปรเจ็กต์เมื่อฉันเพิ่มการอ้างอิงครั้งที่ 2 ในโปรเจ็กต์ของฉัน กรุณาแก้ไขอย่างใดอย่างหนึ่ง ??.
Ajay Bhayani

แอป 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

คิดออก

คุณจะต้องเพิ่มการพึ่งพาการไล่ระดับสีต่อไปนี้:

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
Oleksii Malovanyi

4
คุณจะทำอย่างไรกับ Eclipse?
นักพัฒนา Android

2
โพสต์ reddit นี้ทำให้ฉันรู้สึกดีขึ้นอีกเล็กน้อยหลังจากได้รับข้อผิดพลาด INSTALL_FAILED_OLDER_SDK
Oren

7
เหตุใดไลบรารีการสนับสนุนจึงขึ้นอยู่กับ Android เวอร์ชันล่าสุด นั่นเป็นการเอาชนะวัตถุประสงค์ทั้งหมดของการมีไลบรารีสนับสนุน
Christopher Perry

2
หากคุณต้องการคอมไพล์กับ Android เวอร์ชันเก่าคุณสามารถทำได้ ในการกำจัดข้อผิดพลาด INSTALL_FAILED_OLDER_SDK คุณต้องแทนที่<uses-sdk />คำประกาศในไฟล์ AndroidManifest.xml ด้วย:<uses-sdk tools:node="replace" />
Christopher Perry

9

สิ่งนี้ใช้ได้กับฉัน:

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

1
นั่นไม่ใช่ปัญหาสิ่งที่คุณเขียนเป็นเพียงอีกเวอร์ชันหนึ่งของสิ่งที่เขารวมไว้แล้ว
AlleyOOP

7

ขณะนี้สามารถเพิ่ม RecyclerView ได้โดยการรวบรวมการพึ่งพาการออกแบบในแอป gradle:

dependencies {
...
compile 'com.android.support:design:24.0.0'
}

1
สำหรับผู้ที่ลงคะแนนgithub.com/android/platform_frameworks_support/blob/master/…ที่นี่คุณสามารถดูได้
Lubos Mudrak

4

หากคุณมี SDK เวอร์ชัน 22.2.0 ที่คอมไพล์แล้วให้เพิ่มการอ้างอิงด้านล่างสำหรับมุมมองรีไซเคิลและมุมมองการ์ดเพิ่มเติมสำหรับการสนับสนุน cardView

// สำหรับการรวม libarary ทั้งหมดในไดเร็กทอรี lib
compile fileTree(include: ['*.jar'], dir: 'libs')
// สำหรับ support appcompat
compile 'com.android.support:appcompat-v7:22.2.0'
// สำหรับรวมการออกแบบการสนับสนุนของ Google (ทำให้สามารถใช้งานชุดรูปแบบการออกแบบวัสดุตั้งแต่ 2.3 ขึ้นไป)
คอมไพล์ com.android.support:design:22.2 0 '

สำหรับการเพิ่มมุมมองผู้รีไซเคิลให้ใช้การอ้างอิงต่อไปนี้
compile 'com.android.support:recyclerview-v7:22.2.0'


หลังจากนั้นคลิกที่สร้าง -> สร้างโครงการใหม่และเสร็จสิ้น



2

ขั้นตอนก่อนหน้าฉันขาดไปเพียงก้าวเดียว

หลังจากแก้ไขbuild.gradle (Module: app) และเพิ่มการอ้างอิงต่อไปนี้:

รวบรวม 'com.android.support:cardview-v7:21.0.+'
คอมไพล์ 'com.android.support:recyclerview-v7:21.0.+'

(เพิ่ม cardview ถ้าจำเป็น)

จากนั้นคุณต้องไปที่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'เป็นการพึ่งพาในโครงสร้างการไล่ระดับของฉัน

(พร้อม 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 -ources.jar



1

- ไปที่ส่วนการออกแบบในactivity_main.xml - ในลากวางพาเลทเลือกappCompactivity - ในappCompactivityเลือกRecyclerView - ใน การเลือกกล่องโต้ตอบจะปรากฏขึ้นให้คลิกตกลง - แอปโครงการของคุณ: 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:+'

จะให้ข้อผิดพลาดกับข้อความต่อไปนี้ "Configuration" compile "ล้าสมัยและถูกแทนที่ด้วย" การใช้งาน "และ" api "ซึ่งจะถูกลบออกในปลายปี 2018"

ลองใช้สิ่งนี้

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

1

ฉันใช้อันนี้ทำงานให้ฉัน สิ่งหนึ่งที่ต้องพิจารณาว่าappcompatคุณกำลังใช้เวอร์ชันใด ฉันกำลังใช้appcompat-v7:26.+สิ่งนี้จึงใช้ได้ผลสำหรับฉัน

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

0

เป็นวิธีที่ดีที่จะนำเข้า RecyclerView ลงในโครงการของคุณเป็นRecyclerViewLib นี่คือไลบรารีโอเพ่นซอร์สที่ดึง RecyclerView ออกมาเพื่อให้ใช้งานได้อย่างปลอดภัยและง่ายดาย คุณสามารถอ่านบล็อกโพสต์ของผู้เขียนที่นี่

เพิ่มบรรทัดต่อไปนี้เป็นการพึ่งพาการไล่ระดับสีในรหัสของคุณ:

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

ข้อมูลเพิ่มเติมเกี่ยวกับวิธีนำการพึ่งพาการไล่ระดับสี:

บอสเนียคุณพูดถูกว่าน่ารำคาญ Gradle อาจดูซับซ้อน แต่มีประสิทธิภาพและยืดหยุ่นมาก ทุกอย่างเสร็จสิ้นในภาษาที่สนุกสนานและการเรียนรู้ระบบการไล่ระดับคือการเรียนรู้ภาษาอื่นเพื่อให้คุณสามารถสร้างแอป Android ของคุณได้ ตอนนี้เจ็บ แต่ในระยะยาวคุณจะรักมัน

ตรวจสอบ build.gradle สำหรับแอปเดียวกัน https://github.com/twotoasters/RecyclerViewLib/blob/master/sample/build.gradleโดยที่ทำสิ่งต่อไปนี้คือที่ที่จะนำ lib เข้าสู่โมดูล (หรือที่เรียกว่าแอพตัวอย่าง)

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

ให้ความสนใจกับตำแหน่งของไฟล์นี้ นี่ไม่ใช่ build.gradle ระดับบนสุด

เนื่องจากแหล่ง lib ':library'ที่อยู่ในโครงการเดียวกันมันสามารถที่จะทำเช่นนี้กับที่เรียบง่าย ตัวexcludeบอกให้ lib ใช้การสนับสนุน v4 ของแอปตัวอย่าง นั่นไม่จำเป็น แต่เป็นความคิดที่ดี คุณไม่มีหรือต้องการมีซอร์สของ lib ในโปรเจ็กต์ของคุณดังนั้นคุณต้องชี้ไปที่อินเทอร์เน็ต ใน build.gradle ของโมดูล / แอปของคุณคุณต้องวางบรรทัดนั้นตั้งแต่เริ่มต้นของคำตอบนี้ในตำแหน่งเดียวกัน หรือถ้าต่อไปตัวอย่างเช่นตัวอย่างเช่นคุณสามารถแทนที่':library'ด้วย' com.twotoasters.RecyclerViewLib:library:1.0.+@aar 'และใช้โดยไม่คิด


ฉันได้รับข้อผิดพลาดนี้Could not find any version that matches com.twotoasters.RecyclerViewLib:library:1.0.+: - /
Besnik

คุณวางไว้ในตำแหน่งที่ถูกต้องใน build.gradle ของคุณหรือไม่? คุณใส่ไว้ในโมดูล build.gradle ของคุณหรือไม่?
MinceMan

"ที่ถูกต้อง" อยู่ที่ไหน? ฉันเพิ่งต่อท้ายบรรทัดเหล่านี้ใน build.gradle ของฉันวางไว้ด้านนอก / ด้านในจาก Android {} ภายใน / ภายนอกจาก buildscript {} แต่ไม่มีอะไรได้ผลสำหรับฉัน ฉันเพิ่งเริ่มเรียนและดูเหมือนจะซับซ้อนมาก ... และเมื่อฉันอ่านข้อความเช่น "ใส่บรรทัดนี้ ... " มันน่ารำคาญมาก ... :-(
Besnik

1
@Besnik ฉันอัปเดตคำตอบของฉันพร้อมข้อมูลเพิ่มเติมเกี่ยวกับระบบสร้างเกรด ฉันหวังว่าข้อมูลจะเป็นประโยชน์
MinceMan

ขอบคุณ! ฉันจะลองใช้ในวันถัดไป :-)
Besnik

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
ไม่แนะนำให้ใช้สัญกรณ์ + อย่างน้อยระบุเวอร์ชันหลัก
Dejan

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

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

ใน 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.