RecyclerView에서 아이템 클릭시 해당 내용을 다른 액티비티에 보여주는 예제입니다.
최초작성 2019. 2. 17
최종작성 2019. 8. 22
1. RecyclerView 기본 예제 코드는 다음 포스팅을 참고하세요.
Android RecyclerView 간단한 예제
https://webnautes.tistory.com/1214
2. 다음 코드를 추가합니다.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview_main_list); LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLinearLayoutManager);
mArrayList = new ArrayList<>(); mAdapter = new CustomAdapter( mArrayList); mRecyclerView.setAdapter(mAdapter);
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), mLinearLayoutManager.getOrientation()); mRecyclerView.addItemDecoration(dividerItemDecoration);
mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), mRecyclerView, new ClickListener() { @Override public void onClick(View view, int position) { Dictionary dict = mArrayList.get(position); Toast.makeText(getApplicationContext(), dict.getId()+' '+dict.getEnglish()+' '+dict.getKorean(), Toast.LENGTH_LONG).show(); }
@Override public void onLongClick(View view, int position) { } }));
Button buttonInsert = (Button)findViewById(R.id.button_main_insert); buttonInsert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {
count++;
// Dictionary 생성자를 사용하여 ArrayList에 삽입할 데이터를 만듭니다. Dictionary data = new Dictionary(count+"","Apple" + count, "사과" + count);
//mArrayList.add(0, dict); //RecyclerView의 첫 줄에 삽입 mArrayList.add(data); // RecyclerView의 마지막 줄에 삽입
mAdapter.notifyDataSetChanged(); //변경된 데이터를 화면에 반영 } });
}
public interface ClickListener { void onClick(View view, int position);
void onLongClick(View view, int position); }
public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
private GestureDetector gestureDetector; private MainActivity.ClickListener clickListener;
public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final MainActivity.ClickListener clickListener) { this.clickListener = clickListener; gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; }
@Override public void onLongPress(MotionEvent e) { View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (child != null && clickListener != null) { clickListener.onLongClick(child, recyclerView.getChildAdapterPosition(child)); } } }); }
@Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { View child = rv.findChildViewUnder(e.getX(), e.getY()); if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { clickListener.onClick(child, rv.getChildAdapterPosition(child)); } return false; }
@Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { }
@Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } }
}
|
3. 데이터 추가 버튼을 눌러서 Recyclerview에 데이터를 추가합니다.
그 다음 Recyclerview에서 아이템 하나를 선택하면 해당 목록에 있는 내용을 Toast를 사용하여 화면에 보여줍니다.
4. 이제 다른 액티비티에 값을 전달해봅니다.
텍스트뷰에 전달받은 값을 보여줄 용도로 사용할 activity_result.xml 레이아웃 파일을 추가합니다.
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent">
<TextView android:id="@+id/textView_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintLeft_toLeftOf="parent" android:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout> |
5. 전달받은 값을 보여줄 ResultActivity.java 액티비티 파일을 추가합니다.
package com.tistory.webnautes.endlessloading;
import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import android.widget.TextView;
public class ResultActivity extends AppCompatActivity {
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_result);
String id = ""; String korean = ""; String english = "";
Bundle extras = getIntent().getExtras();
id = extras.getString("id"); korean = extras.getString("korean"); english = extras.getString("english");
TextView textView = (TextView) findViewById(R.id.textView_result);
String str = id + '\n' + english + '\n' + korean; textView.setText(str);
} } |
6. ResultActivity를 AndroidManifest.xml 매니패스트 파일에 추가합니다.
이렇게 해주어야 액티비티간 전환이 가능합니다.
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
<activity android:name=".ResultActivity"> </activity> </application> |
7. MainActivity에 다른 액티비티로 데이터를 전달하는 코드를 추가합니다.
RecyclerView에서 선택된 아이템이 전달됩니다.
mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), mRecyclerView, new ClickListener() { @Override public void onClick(View view, int position) { Dictionary dict = mArrayList.get(position); Toast.makeText(getApplicationContext(), dict.getId()+' ' +dict.getEnglish()+' '+dict.getKorean(), Toast.LENGTH_LONG).show();
Intent intent = new Intent(getBaseContext(), ResultActivity.class);
intent.putExtra("id", dict.getId()); intent.putExtra( "korean", dict.getKorean()); intent.putExtra("english", dict.getEnglish());
startActivity(intent); }
@Override public void onLongClick(View view, int position) { } })); |
8. 실행결과 전달받은 데이터를 보여줍니다.
관련 포스팅
Android RecyclerView 간단한 예제
https://webnautes.tistory.com/1214
Android RecyclerView에 데이터를 추가/편집/삭제하는 예제
https://webnautes.tistory.com/1222