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?
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:+' }
źródło
<uses-sdk />
deklarację w pliku AndroidManifest.xml na:<uses-sdk tools:node="replace" />
To działa dla mnie:
compile 'com.android.support:recyclerview-v7:21.0.0-rc1'
źródło
RecyclerView można teraz dodać, kompilując zależność projektu w aplikacji Gradle:
dependencies { ... compile 'com.android.support:design:24.0.0' }
źródło
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 '
Następnie kliknij Build-> przebuduj projekt i gotowe.
źródło
compile 'com.android.support:recyclerview-v7:24.2.1'
To działa dla mnie. Spróbuj.
źródło
W krokach przede mną brakuje tylko jednego kroku.
Po zmianie build.gradle (Module: app) i dodaniu następujących zależności:
(W razie potrzeby dodaj widok karty)
Następnie musisz przejść do Build> Clean Project, aby pozbyć się błędów
źródło
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.
źródło
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.
źródło
Uwzględnij zależność w
build.gradle
i zsynchronizuj projekt zgradle
plikamidependencies { 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
źródło
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.gradle
aktachźródło
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:
źródło
Inne odpowiedzi mi nie pomogły. Musiałem dodać tę linię:
źródło
-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
źródło
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
źródło
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:+'
źródło
Użyłem tego, który działa dla mnie. Należy wziąć pod uwagę, jakiej
appcompat
wersji używasz. Używam,appcompat-v7:26.+
więc to działa dla mnie.implementation 'com.android.support:recyclerview-v7:26.+'
źródło
Ś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'
.exclude
Opowiada 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ń.źródło
Could not find any version that matches com.twotoasters.RecyclerViewLib:library:1.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!
źródło
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.build
pliku:compile 'com.android.support:cardview-v7:+' compile 'com.android.support:recyclerview-v7:+' compile 'com.android.support:palette-v7:+'`
źródło
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>
źródło
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.
źródło