본문 바로가기
SW - 안드로이드

안드로이드 스튜디오 리사이클러뷰(RecyclerView) 사용법 -갤러리 읽기

by 상승남 2019. 9. 2.
728x90
반응형

 

 

 

안드로이드 스튜디오 리사이클러뷰 공식 개발 문서

https://developer.android.com/guide/topics/ui/layout/recyclerview

 

Create a List with RecyclerView  |  Android Developers

Using RecyclerView to display lists and grids of dynamic content.

developer.android.com

public class MyActivity extends Activity {
   
private RecyclerView recyclerView;
   
private RecyclerView.Adapter mAdapter;
   
private RecyclerView.LayoutManager layoutManager;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView
(R.layout.my_activity);
        recyclerView
= (RecyclerView) findViewById(R.id.my_recycler_view);

       
// use this setting to improve performance if you know that changes
       
// in content do not change the layout size of the RecyclerView
        recyclerView
.setHasFixedSize(true);

       
// use a linear layout manager
        layoutManager
= new LinearLayoutManager(this);
        recyclerView
.setLayoutManager(layoutManager);

       
// specify an adapter (see also next example)
        mAdapter
= new MyAdapter(myDataset);
        recyclerView
.setAdapter(mAdapter);
   
}
   
// ...
}

 

위 리사이클러뷰 자바 코드를 넣을 클래스를 생성해준다.

위 리사이클러뷰 자바 코드를 넣을 클래스를 생성해준다.

 

 

 

아래 코드를 클래스 안에 넣은 모습

아래 코드를 클래스 안에 넣은 모습

 

 

 

public class MyActivity extends Activity {
    
private RecyclerView recyclerView;
    
private RecyclerView.Adapter mAdapter;
    
private RecyclerView.LayoutManager layoutManager;

    
@Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        setContentView
(R.layout.my_activity);
        recyclerView 
= (RecyclerView) findViewById(R.id.my_recycler_view);

        
// use this setting to improve performance if you know that changes
        
// in content do not change the layout size of the RecyclerView
        recyclerView
.setHasFixedSize(true);

        
// use a linear layout manager
        layoutManager 
= new LinearLayoutManager(this);
        recyclerView
.setLayoutManager(layoutManager);

        
// specify an adapter (see also next example)
        mAdapter 
= new MyAdapter(myDataset);
        recyclerView
.setAdapter(mAdapter);
    
}
    
// ...
}

 

 

 

클래스명 옆에 extends AppCompatActivity를 붙혀준다.

클래스명 옆에 extends AppCompatActivity를 붙혀준다.

 

 

리사이클러뷰에 해당하는 xml 과 recyclerview id를 연결시켜 줍니다.

 

리사이클러뷰에 해당하는 xml 과 recyclerview id를 연결시켜 줍니다.

 

Adapter 클래스를 생성하여 줍니다.

Adapter 클래스를 생성하여 줍니다.

 

 

어댑터 클래스에 아래 코드를 붙혀 줍니다.

어댑터 클래스에 아래 코드를 붙혀 줍니다.

 

 

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
   
private String[] mDataset;

   
// Provide a reference to the views for each data item
   
// Complex data items may need more than one view per item, and
   
// you provide access to all the views for a data item in a view holder
   
public static class MyViewHolder extends RecyclerView.ViewHolder {
       
// each data item is just a string in this case
       
public TextView textView;
       
public MyViewHolder(TextView v) {
           
super(v);
            textView
= v;
       
}
   
}

   
// Provide a suitable constructor (depends on the kind of dataset)
   
public MyAdapter(String[] myDataset) {
        mDataset
= myDataset;
   
}

   
// Create new views (invoked by the layout manager)
   
@Override
   
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
                                                   
int viewType) {
       
// create a new view
       
TextView v = (TextView) LayoutInflater.from(parent.getContext())
               
.inflate(R.layout.my_text_view, parent, false);
       
...
       
MyViewHolder vh = new MyViewHolder(v);
       
return vh;
   
}

   
// Replace the contents of a view (invoked by the layout manager)
   
@Override
   
public void onBindViewHolder(MyViewHolder holder, int position) {
       
// - get element from your dataset at this position
       
// - replace the contents of the view with that element
        holder
.textView.setText(mDataset[position]);

   
}

   
// Return the size of your dataset (invoked by the layout manager)
   
@Override
   
public int getItemCount() {
       
return mDataset.length;
   
}
}

 

 

 

클래스 명과 다른 부분은 Ctrl + R을 눌러서 My라는 글자를 Gallery(자신의 프로젝트에 맞는 클래스명)으로 변경해줍니다.

클래스 명과 다른 부분은 Ctrl + R을 눌러서 My라는 글자를

Gallery(자신의 프로젝트에 맞는 클래스명)으로 변경해줍니다.

 

 

명칭을 맞게 변경해 줍니다. 그 후 myDataset을 정의해 줍니다.

명칭을 맞게 변경해 줍니다.

그 후 myDataset을 정의해 줍니다.

 

 

myDataset 는 String으로 정의되어 있습니다.

myDataset 는 String으로 정의되어 있습니다.

 

 

 String [] myDataset = {""}; 의 형식으로 정의해 줍니다.

 String [] myDataset = {""}; 의 형식으로 정의해 줍니다.

 

 

 

 

 

Gallery_text_view에 들어갈  item_gallery.xml 를 만들어 줍니다.

Gallery_text_view에 들어갈  item_gallery.xml 를 만들어 줍니다.

 

 

 item_gallery.xml 에서 CardView를 제작해줍니다.

 item_gallery.xml 에서 CardView를 제작해줍니다.

 

 

CardView를 상단에 정의해줍니다.

CardView를 상단에 정의해줍니다.

 

 

Textview 였던것을 cardView로 재정의해줍니다.

Textview 였던것을 cardView로 재정의해줍니다.

 

 

갤러리 읽기 위한 권한 넣기

갤러리 읽기 위한 권한 넣기

 

 

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

 

 

안드로이드 권한 요청 추가하기

안드로이드 권한 요청 추가하기

 

 

공식문서 : https://developer.android.com/training/permissions/requesting

 

앱 권한 요청  |  Android Developers

모든 Android 앱은 액세스가 제한된 샌드박스에서 실행됩니다. 자체 샌드박스 밖에 있는 리소스나 정보를 앱이 사용해야 하는 경우에는 앱이 적절한 권한을 요청해야 합니다. 앱에 권한이 필요함을 선언하려면 해당 권한을 앱 manifest에 나열한 후 사용자가 런타임에 각 권한을 승인하도록 요청합니다(Android 6.0 이상). 이 페이지에서는 Android 지원 라이브러리를 사용하여 권한을 확인하고 요청하는 방법을 설명합니다. Android 프레임워크에

developer.android.com

  // Here, thisActivity is the current activity
   
if (ContextCompat.checkSelfPermission(thisActivity,
           
Manifest.permission.READ_CONTACTS)
           
!= PackageManager.PERMISSION_GRANTED) {

       
// Permission is not granted
       
// Should we show an explanation?
       
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
               
Manifest.permission.READ_CONTACTS)) {
           
// Show an explanation to the user *asynchronously* -- don't block
           
// this thread waiting for the user's response! After the user
           
// sees the explanation, try again to request the permission.
       
} else {
           
// No explanation needed, we can request the permission.
           
ActivityCompat.requestPermissions(thisActivity,
                    arrayOf
(Manifest.permission.READ_CONTACTS),
                    MY
_PERMISSIONS_REQUEST_READ_CONTACTS)

           
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
           
// app-defined int constant. The callback method gets the
           
// result of the request.
       
}
   
} else {
       
// Permission has already been granted
   
}


   

 

갤러리 액티비티 진입전 권한요청 코드 추가

갤러리 액티비티 진입전 권한요청 코드 추가

MY_PERMISSIONS_REQUEST_READ_CONTACTS란?

 

MY_PERMISSIONS_REQUEST_READ_CONTACTS 를 1로 변경

 

 

READ_EXTERNAL_STORAGE 권한과 액티비티를 추가 해줌

 

 

권한 요청 응답 처리

사용자가 앱 권한 요청에 응답하면 시스템은 앱의 onRequestPermissionsResult() 메서드를 호출하여 사용자 응답에 전달합니다. 권한이 부여되었는지 확인하려면 앱은 해당 메서드를 재정의해야 합니다. 이 콜백에는 requestPermissions()에 전달한 것과 동일한 요청 코드가 전달됩니다. 예를 들어 앱이 READ_CONTACTS 액세스를 요청하는 경우 다음과 같은 콜백 메서드가 있을 수 있습니다.

 

 

 

 

 

반응형

댓글