RecyclearView 사용 시 문제 해결 방법
17305 단어 RecyclerViewAndroid
ListView
가 추가됐다.RecyclerView
에 대해 조사한 결과RecyclerView
와 비교하면실제 상황이 어떠한지 사용하기 전의 절차와 주의한 일을 모두 써야 한다.
※ 본 기사는 다음과 같은 환경에서 실시됩니다.
IDE: Android Studio 0.8.8
Java: 1.6.0_65
※ 안드로이드 디벨로퍼스에는
ListView
의 훈련Creating Lists and Cards이 있습니다.compileSdkVersion android-L의 회피 방법
Android Studio에서 새 Project
RecyclerView
를 Minimum SDK
로 설정합니다.제작시build입니다.gradle을 확인한 후 아래와 같다.
build.gradle
android {
compileSdkVersion 'android-L'
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "jp.co.samril.myapplication"
minSdkVersion 'L'
targetSdkVersion 'L'
versionCode 1
versionName "1.0"
}
...
}
실제로 이렇게 만든 프로젝트를 컴파일하면 다음과 같은 오류가 발생합니다.Error:compileSdkVersion android-L requires compiling
찾아보니 버그인 것 같아요.
[How-to] Use the v21 Support Libs on Older Versions & Target L While Remaining Backwards-Compatible
build.그레이드를 아래처럼 수정하면 돼요.
build.gradle
android {
compileSdkVersion 20 // ★ここを整数に
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "jp.co.samril.myapplication"
minSdkVersion 'L'
targetSdkVersion 'L'
versionCode 1
versionName "1.0"
}
...
}
낮은 SDK로 컴파일하는 방법
API 20+: Android L
는 안드로이드 L에서 추가된 Wisit이므로 SDK Version이 20 이상이어야 합니다.build.gradle의
RecyclerView
에 다음 내용을 설정합니다build.gradle
dependencies {
compile 'com.android.support:support-v4:20.+'
compile 'com.android.support:recyclerview-v7:+'
}
낮은 SDK를 실제로 설정하면 다음과 같은 컴파일 오류가 발생합니다.Error:Execution failed for task '...'.
> Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version L declared in library com.android.support:support-v4:21.0.0-rc1
이걸 해제하려면 안드로이드 매니페스트.xml에
dependencies
의 설정을 추가하면 됩니다.AndroidManifest.xml
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="jp.co.homes.android3" >
<uses-sdk tools:node="replace" />
...
추가uses-sdk
와xmlns:tools="http://schemas.android.com/tools"
.이렇게 하면Gradle의 빌딩이 통과할 수 있습니다.
배치를 구성할 때 미리 보기를 볼 수 없습니다.
레이아웃 파일에서 일반적인
<uses-sdk tools:node="replace" />
과 같은 설명을 사용할 수 있습니다.layout.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
다만, 프리뷰를 확인할 때ListView
가 발생한다.Rendering Problems
The new RecyclerView does not yet work in Studio. We are working on a fix. ( Open Issue 72117 , Show Exception)
링크에 명시된 대로 Android Studio가 아직 실행되지 않은 것 같습니다
java.lang.NullPointerException
.스케줄러:정말?표시할 때 발생하는 NullPoint erException을 방지하는 방법
삽입
RecyclerView
및 순조롭게 구축.그러면 실기와 지니모션으로 동작을 확인하기 위해 화면을 표시할 때
RecyclerView
가 붕괴됐다.java.lang.NullPointerException
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
...
찾아보니 이것도 안드로이드 스튜디오의 버그...Using CardView and RecyclerView in my layout files throws an exception
원인은 아직 초기화되지 않은 것 같다
java.lang.NullPointerException
.회피 방법은 다음과 같다.
***Activity.java
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.my_recycler_view);
recyclerView.setHasFixedSize(true); // RecyclerViewのサイズを維持し続ける
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
이 설치는 RecyclerView
또는 onCreate()
에 추가됩니다.이렇게 하면 NullPoint erException을 피할 수 있습니다.
줄 사이에 구분선을 표시하는 방법
onCreateView()
에서 RecyclerView
를 그릴 때 줄 사이의 구분선은 표시되지 않습니다.이를 피하기 위해 RecyclerView.ItemDecoration를 사용하십시오.
RecyclerView.ItemDecoration 소개
어댑터가 설정한 특정 뷰에 드로잉 및 레이아웃을 추가할 수 있습니다.
예를 들어 이번과 같은 분리선과 하이라이트 등은 다양한 표현을 할 수 있다
참조https://gist.github.com/alexfu/0f464fc3742f134ccd1e는 다음 범주를 만듭니다.
MyItemDecoration.java
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* Created by samukaak on 2014/11/20.
*/
public class MyItemDecoration extends RecyclerView.ItemDecoration {
private static final int[] ATTRS = new int[]{
android.R.attr.listDivider
};
private Drawable mDivider;
public MyItemDecoration(final Context context) {
final TypedArray array = context.obtainStyledAttributes(ATTRS);
mDivider = array.getDrawable(0);
array.recycle();
}
@Override
public void getItemOffsets(final Rect outRect, final int itemPosition, final RecyclerView parent) {
outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
}
@Override
public void onDraw(final Canvas c, final RecyclerView parent) {
drawVertical(c, parent);
}
public void drawVertical(final Canvas c, final RecyclerView parent) {
final int left = parent.getPaddingLeft();
final int right = parent.getWidth() - parent.getPaddingRight();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
}
android.R.layout.simple_list_item_1
로 그걸 설정하세요.***Activity.java
recyclerView.addItemDecoration(new MyItemDecoration(getActivity()));
참고 자료
Reference
이 문제에 관하여(RecyclearView 사용 시 문제 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Sam/items/d5b82f6c2830fa4d14a2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)