Cách nhập RecyclerView cho Android L-preview


90

Đang cố gắng sử dụng RecyclerView mới từ thư viện hỗ trợ. Tôi đã tải xuống bản cập nhật 20 cho thư viện hỗ trợ bằng trình quản lý SDK.

Tôi đã thêm tệp jar vào thư mục libs - và thêm vào đường dẫn xây dựng - không may mắn khi sử dụng RecyclerView.

Đã cố gắng sử dụng cả sự phụ thuộc của lớp theo API của nhà phát triển Android - không chắc đây có phải là nơi thích hợp để tìm hay không - trang này liên quan nhiều hơn đến AndroidTV:

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

Không thể đồng bộ hóa dự án.

Bất kỳ ý tưởng?

Câu trả lời:


82

Tôi đã tạo bằng cách sử dụng các dòng sau và điều này phù hợp với tôi.

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

Đối với AndroidX

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

Để có hướng dẫn đầy đủ, vui lòng xem tại đây


Lỗi: Không thực thi được tác vụ ': app: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Xử lý 'lệnh' / usr / lib / jvm / java-7-openjdk-amd64 / bin / java '' đã hoàn thành bằng non -zero thoát giá trị 2. Tôi gặp lỗi này khi tôi chạy dự án khi tôi thêm phụ thuộc thứ 2 vào dự án của mình. xin vui lòng, sửa chữa nó bất kỳ một trong những ??.
Ajay Bhayani

Gradle.build trong ứng dụng của tôi đã biên dịch 'com.android.support:appcompat-v7:23.2.1' rồi. Vì vậy, tôi đã cố gắng thêm biên dịch 'com.android.support:recyclerview-v7:23.2.1' - cùng một phiên bản với appcompat, nhưng đồng bộ hóa gradle không thành công, đã cố gắng thay đổi thành "+" như 'com.android.support: Recyclerview-v7: 23.2. + ', cũng không thành công :(
Andiana

164

Tìm ra.

Bạn sẽ phải thêm phụ thuộc gradle sau:

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

một vấn đề khác mà tôi đã biên dịch là compileSdkVersion. Rõ ràng bạn sẽ phải biên dịch nó vớiandroid-L

Tệp build.gradle của bạn sẽ trông giống như sau:

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

4
Làm thế nào để bạn làm điều đó với Eclipse?
nhà phát triển android

2
bài đăng reddit này đã giúp tôi đi xa hơn một chút sau khi gặp lỗi INSTALL_FAILED_OLDER_SDK.
Oren

7
Tại sao thư viện hỗ trợ lại phụ thuộc vào phiên bản Android mới nhất? Điều đó đánh bại toàn bộ mục đích của việc có một thư viện hỗ trợ.
Christopher Perry

2
Nếu bạn muốn biên dịch dựa trên phiên bản Android cũ hơn, bạn có thể. Để thoát khỏi lỗi INSTALL_FAILED_OLDER_SDK bạn cần phải thay thế của bạn <uses-sdk />khai trong file AndroidManifest.xml của bạn với:<uses-sdk tools:node="replace" />
Christopher Perry

9

Điều này phù hợp với tôi:

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

1
đó không phải là vấn đề, những gì bạn đã viết chỉ là một phiên bản của những gì ông đã bao gồm
AlleyOOP


4

Nếu bạn đã biên dịch SDK phiên bản 22.2.0 thì hãy thêm phần phụ thuộc bên dưới cho chế độ xem trình tái chế và chế độ xem thẻ bổ sung để hỗ trợ chế độ xem thẻ

// để bao gồm tất cả libarary trong thư mục lib
compile fileTree(include: ['*.jar'], dir: 'libs')
// để hỗ trợ appcompat
compile 'com.android.support:appcompat-v7:22.2.0'
// để bao gồm thiết kế hỗ trợ của Google (có thể triển khai chủ đề material design từ 2.3 trở lên)
`compile 'com.android.support:design:22.2. 0 '

để thêm chế độ xem trình tái chế sử dụng phụ thuộc sau
compile 'com.android.support:recyclerview-v7:22.2.0'


Sau đó nhấp vào Xây dựng-> xây dựng lại dự án và bạn đã hoàn tất.


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

Điều này làm việc cho tôi. Thử nó.


2

Các bước trước tôi chỉ thiếu một bước.

Sau khi thay đổi build.gradle (Module: app) và thêm các phần phụ thuộc sau:

biên dịch 'com.android.support:cardview-v7:21.0.+'
biên dịch 'com.android.support:recyclerview-v7:21.0.+'

(Thêm cardview nếu cần)

Sau đó, bạn phải chuyển đến Build> Clean Project để loại bỏ bất kỳ lỗi nào


Cảm ơn anh bạn, tôi đã phải vật lộn với Android studio trong nhiều giờ, ý tưởng Dự án sạch của bạn đã thành công, Cảm ơn một lần nữa.
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'
}

Chỉ cần tạo các phụ thuộc của bạn như trên trong tệp build.gradle, phù hợp với tôi.


2

trong trường hợp của tôi, tôi đã sửa nó bằng cách đặt nó compile 'com.android.support:recyclerview-v7:22.0.0'như một phụ thuộc vào bản dựng gradle của tôi

(với Android studio v. 1.2.1.1 và tất cả sdk được cập nhật.)

Thực sự khó chịu khi các mã được cập nhật quá nhanh và IDE không thể theo dõi chúng và bạn phải sửa chúng theo cách thủ công, lãng phí thời gian và tài nguyên.

Nhưng cuối cùng thì nó cũng hoạt động.


2

bao gồm sự phụ thuộc vào build.gradlevà đồng bộ hóa dự án với gradlecác tệp

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

Bao gồm bản sửa đổi (ở đây là 25.1.1) để tránh các bản dựng không thể đoán trước, hãy kiểm tra các bản sửa đổi thư viện


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

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

Ở trên phù hợp với tôi trong build.gradlehồ sơ


1

Tôi đã sử dụng một bản hack nhỏ để sử dụng RecyclerView trên các thiết bị cũ hơn. Tôi vừa vào kho lưu trữ m2 cục bộ của mình và chọn các tệp nguồn RecyclerView và đưa chúng vào dự án của mình.

Bạn có thể tìm thấy mã nguồn tại đây:

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


1

Các câu trả lời khác không làm việc cho tôi. Tôi đã phải thêm dòng này:

biên dịch 'com.android.support:recyclerview-v7:21.0.0'


1

- Chuyển đến phần THIẾT KẾ trong activity_main.xml -Trong pallet kéo thả, chọn appCompactivity -Trong appCompactivity Chọn RecyclerView -Trên Lựa chọn, một hộp thoại sẽ xuất hiện nhấp vào OK -Ứng dụng dự án của bạn: gradle sẽ tự động được cập nhật


1

Sự phụ thuộc của tôi;

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

Tôi chỉ thêm biên dịch 'com.android.support:recyclerview-v7:25.1.0' . Điều quan trọng là thêm phần phụ thuộc RecycleView giống như phiên bản tương tự như appcompat


1

Nếu bạn đang sử dụng Phiên bản cập nhật hoặc 2018 cho Android Studio ...

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

sẽ báo lỗi cho bạn với thông báo sau "Cấu hình 'biên dịch' đã lỗi thời và đã được thay thế bằng 'thực hiện' và 'api'. Nó sẽ bị xóa vào cuối năm 2018".

Hãy thử sử dụng cái này

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

1

Tôi đã sử dụng cái này đang làm việc cho tôi. Một điều cần phải xem xét rằng appcompatbạn đang sử dụng phiên bản nào. Tôi đang sử dụng appcompat-v7:26.+vì vậy điều này đang làm việc cho tôi.

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

0

Một cách tuyệt vời để nhập RecyclerView vào dự án của bạn là RecyclerViewLib . Đây là một thư viện mã nguồn mở đã rút RecyclerView để làm cho nó an toàn và dễ dàng triển khai. Bạn có thể đọc bài viết trên blog của tác giả tại đây .

Thêm dòng sau làm phụ thuộc gradle trong mã của bạn:

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

Thông tin thêm về cách mang lại sự phụ thuộc vào gradle:

Bosnia, bạn nói đúng về điều đó gây phiền nhiễu. Gradle có vẻ phức tạp nhưng nó cực kỳ mạnh mẽ và linh hoạt. Mọi thứ đều được thực hiện bằng ngôn ngữ linh hoạt và học hệ thống gradle là học một ngôn ngữ khác để bạn có thể xây dựng ứng dụng Android của mình. Bây giờ nó đau, nhưng về lâu dài bạn sẽ thích nó.

Kiểm tra build.gradle cho cùng một ứng dụng. https://github.com/twotoasters/RecyclerViewLib/blob/master/sample/build.gradle Nơi nó thực hiện như sau là nơi nó đưa lib vào mô-đun (còn gọi là ứng dụng mẫu)

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

Chú ý đến vị trí của tệp này. Đây không phải là bản build.gradle cấp cao nhất

Vì nguồn lib nằm trong cùng một dự án nên nó có thể thực hiện điều này một cách đơn giản ':library'. Lệnh excludecho lib sử dụng hỗ trợ v4 của ứng dụng mẫu. Điều đó không cần thiết nhưng là một ý kiến ​​hay. Bạn không có hoặc không muốn có nguồn của lib trong dự án của mình, vì vậy bạn phải chỉ vào internet để tìm nó. Trong build.gradle của mô-đun / ứng dụng của bạn, bạn sẽ đặt dòng đó từ đầu câu trả lời này vào cùng một vị trí. Hoặc, nếu làm theo ví dụ mẫu, bạn có thể thay thế ':library'bằng ' com.twotoasters.RecyclerViewLib:library:1.0.+@aar 'và sử dụng các loại trừ.


tôi gặp lỗi này Could not find any version that matches com.twotoasters.RecyclerViewLib:library:1.0.+: - /
Besnik

Bạn có đang đặt nó vào đúng vị trí trong build.gradle của mình không? Bạn có đang đưa nó vào build.gradle module của mình không?
MinceMan

đâu là nơi "đúng"? tôi vừa nối những dòng này vào build.gradle của mình, đặt nó bên ngoài / bên trong từ android {}, bên trong / bên ngoài từ bản buildcript {} nhưng không có gì hiệu quả với tôi. tôi mới làm quen với gradle và nó có vẻ rất phức tạp ... và khi tôi đọc một cái gì đó như "chỉ cần đặt dòng này ..." thì nó rất khó chịu ... :-(
Besnik

1
@Besnik Tôi đã cập nhật câu trả lời của mình với nhiều thông tin hơn về hệ thống xây dựng cấp. Tôi hy vọng rằng thông tin là hữu ích.
MinceMan

cảm ơn bạn! tôi sẽ dùng thử trong những ngày tiếp theo :-)
Besnik

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

Trong Android Studio, việc nhập không trực quan như người ta mong đợi. Hãy thử nhập bit này và xem nó hữu ích như thế nào!


Câu hỏi là về sự phụ thuộc của Gradle, không phải về việc nhập Java.
OneCricketeer

0

Nếu ai đó vẫn gặp sự cố này - bạn không cần phải thay đổi compileSdkVersion , điều này chỉ làm mất đi toàn bộ mục đích của các thư viện hỗ trợ.

Thay vào đó, hãy sử dụng những thứ này trong gradle.buildtệp của bạn :

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

1
Nó không được khuyến khích sử dụng + ký hiệu, ít nhất chỉ định phiên bản chính.
Dejan

0

Điều này phù hợp với tôi

Xác định quyền truy cập internet

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

Thêm phụ thuộc

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

Trong hoạt động chính

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

    }
}

Tạo lớp 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;
    }
}

Trong 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

Chỉ là một bản cập nhật:

'biên dịch' hiện đã lỗi thời; nó đã được thay thế bằng 'implement' và 'api'. Tôi tin rằng nó sẽ bị xóa vào cuối năm 2018. Để biết thêm thông tin, hãy xem: http://d.android.com/r/tools/update-dependency-configurations.html

Ngoài ra, tất cả các thư viện com.android.support phải sử dụng cùng một đặc tả phiên bản chính xác; Ngoài ra, các thư viện hỗ trợ như appcompat-v7 và Recyclerview-v7 không được sử dụng phiên bản khác với compileSdkVersion.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.