RecyclerView學習筆記整理(3)解決item中關於跳轉到另一個Activity的問題和判斷多個item進行跳轉到另一個Activity
首先我們需要解決一個問題
RecyclerView中的item如何從A到B跳轉的問題?還有然後當我們解決了一個問題以後出現了第二個問題當出現多個item的時候如何從中進行跳轉?
為此我們需要提前儲備一些些知識。
需要先了解一些這篇文章如果對於item的點選事件不太瞭解的話。
Android中RecyclerView的Item點選事件(總結)
有需要下載原始碼可以點選:
https://github.com/307572384/recycleitemnew
也可以下這個csdn的
https://download.csdn.net/download/qq_16519957/10905113
我們先來看一下實現的效果
這個是點選同意後進入後的activity的效果
點選拒絕後顯示當前item的位置資訊
顯示點選同意後第3個item顯示的資訊
首先我們寫一個實體類Data來存放我們Adapter所需要的東西
package com.beta.recycleitem;
public class Data {
public static final int TYPE_ONE = 1;//型別1
public static final int TYPE_TWO = 2;//型別2
public int type;//item內容 型別
public String message;
public Data(int type, String message) {
this.type = type;
this.message = message;
}
public static int getTypeOne() {
return TYPE_ONE;
}
public static int getTypeTwo() {
return TYPE_TWO;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
我們來寫Recyclerview的Adpter主要就是存放點選事件
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Data> list;//資料來源
private Context mcontent;//上下文
public MyRecyclerViewAdapter(List<Data> list, Context context) {
this.list = list;
this.mcontent = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//選擇型別
switch (viewType) {
case Data.TYPE_ONE:
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemone, parent, false);
return new OneViewHolder(view);
case Data.TYPE_TWO:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemtwo, parent, false);
return new TwoViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return list.size();
}
//item型別
@Override
public int getItemViewType(int position) {
return list.get(position).type;
}
//第一步:自定義一個回撥介面來實現Click和LongClick事件
public interface OnItemClickListener {
void onItemClick(View v, int position);
void onItemLongClick(View v);
}
public OnItemClickListener mOnItemClickListener;//第二步:宣告自定義的介面
//第三步:定義方法並暴露給外面的呼叫者
public void setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener = listener;
}
//第一個item型別
class OneViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private Button btnAgree, btnRefuse;
public OneViewHolder(View itemView) {
super(itemView);
btnAgree = itemView.findViewById(R.id.btn_agree);
btnRefuse = itemView.findViewById(R.id.btn_refuse);
// 為item及item內部控制元件新增點選事件
itemView.setOnClickListener(this);
btnAgree.setOnClickListener(this);
btnRefuse.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(v,getAdapterPosition());
}
}
}
//第二個item型別
class TwoViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TwoViewHolder(View itemView) {
super(itemView);
// 為item新增點選事件
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(v, getAdapterPosition());
}
}
}
}
我們來寫一個Mantivity這裡主要是為了實現點選事件進行跳轉的
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView rv_recy;
private MyRecyclerViewAdapter adpter;
private List<Data> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
rv_recy.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));//佈局管理器
adpter = new MyRecyclerViewAdapter(list, this);//從adapter中獲取到儲存的資料來源list
rv_recy.setAdapter(adpter);
//設定item及item中的控制元件點選事件
adpter.setOnItemClickListener(MyItemClickListener);
}
private void initView() {
rv_recy = (RecyclerView) findViewById(R.id.rv_recy);
}
//存放生成條目
private void initData() {
list = new ArrayList<>();
list.add(new Data(1, "看看這個資源吧"));
list.add(new Data(2, "1"));
list.add(new Data(1, "2"));
list.add(new Data(2, "3"));
list.add(new Data(1, "4"));
list.add(new Data(2, "5"));
list.add(new Data(1, "6"));
list.add(new Data(2, "7"));
}
/**
* item+item裡的控制元件點選監聽事件
*/
private MyRecyclerViewAdapter.OnItemClickListener MyItemClickListener = new MyRecyclerViewAdapter.OnItemClickListener() {
@Override
public void onItemClick(View v, int position) {
switch (v.getId()) {
case R.id.btn_agree:
//對item進行判斷如果是第一個那麼我們進行跳轉反之則提示訊息
if(position==0) {//這裡position用於判斷item是第幾個條目然後我們對其設定就可以跳轉了。
Intent intent = new Intent(MainActivity.this, testActivity.class);
intent.putExtra("name", list.get(position).toString());
startActivity(intent);
}
else{
Toast.makeText(MainActivity.this, "你點選了同意按鈕" + (position + 1), Toast.LENGTH_SHORT).show();
}
break;
case R.id.btn_refuse:
Toast.makeText(MainActivity.this, "你點選了拒絕按鈕" + (position + 1), Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(MainActivity.this, "你點選了item按鈕" + (position + 1), Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onItemLongClick(View v) {
}
};
}
這個主要就是testActivity的一個這個非常簡單的,這裡我推薦大家使用的一個自動生成佈局程式碼外掛Android Studio 自動生成佈局程式碼外掛
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.ToggleButton;
public class testActivity extends Activity implements View.OnClickListener {
private Button button;
private Button test2;
private ToggleButton test;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activitytwo);
initView();
}
private void initView() {
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
test2 = (Button) findViewById(R.id.test2);
test2.setOnClickListener(this);
test = (ToggleButton) findViewById(R.id.test);
test.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
break;
case R.id.test2:
break;
case R.id.test:
break;
}
}
}
activity_main.xml的佈局這裡非常簡單就一個RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.beta.recycleitem.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_recy"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>
itemone
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:src="@mipmap/ic_launcher"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:orientation="vertical"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/iv_icon">
<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="username" />
<TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="無雙?" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:orientation="horizontal"
android:paddingRight="5dp"
android:layout_centerVertical="true">
<Button
android:id="@+id/btn_agree"
android:layout_width="60dp"
android:layout_height="40dp"
android:text="同意"
android:textSize="10dp"/>
<Button
android:id="@+id/btn_refuse"
android:layout_width="60dp"
android:layout_height="40dp"
android:text="拒絕"
android:textSize="10dp"/>
</LinearLayout>
</RelativeLayout>
itemtwo
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:src="@mipmap/ic_launcher"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:orientation="vertical"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/iv_icon">
<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="username" />
</LinearLayout>
</RelativeLayout>
testActivity的佈局activitytwo.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/test2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button" />
<ToggleButton
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="ToggleButton" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button" />
</LinearLayout>
相關文章
- 將一個Activity中的資料傳到另一個Activity的Fragment中的方法Fragment
- Activity A 跳轉到 Activity B,生命週期的執行過程
- Android進階;Activity的棧與跳轉(筆記)Android筆記
- Android Activity跳轉閃屏問題Android
- Activity建立與跳轉
- nginx 從一個路徑訪問另一個路徑怎麼跳轉Nginx
- Flutter與Android的混合開發(3)Flutter如何跳轉到Activity,如何傳值FlutterAndroid
- 一個Activity顯示多個Activity
- Activity 不只有跳轉。功能篇(一)
- 短視訊app開發,點選跳轉到另一個頁面時的過場動畫APP動畫
- 關於 a 標籤跳轉問題
- C# WPF 跳轉到第二個窗體C#
- 網站快照被劫持,網站被劫持跳轉另一個網站解決辦法網站
- onClick事件中點選跳轉新的activity提示FLAG_ACTIVITY_NEW_TASK的奇怪bug事件
- Activity跳轉時傳遞資料的騷操作
- 網頁開啟自動跳轉另一個網頁怎麼辦、網頁劫持怎麼解決網頁
- 2020-11-19 解決bootstraptable 跳轉返回後到原頁問題bootAPT
- 如何判斷一個類是從另一個類繼承繼承
- vue系列:跳轉到同一個路由引數不同但是不觸發更新的問題Vue路由
- 將DataTable一行放入另一個DataTable中(筆記)筆記
- mysql 從一個表中查詢,插入到另一個表中MySql
- [Android]關閉所有Activity,開啟某個ActivityAndroid
- 問題解決:下載的網頁開啟後自動跳轉到首頁網頁
- vim跳轉到本行末尾
- js頁面跳轉的問題(跳轉到父頁面、最外層頁面、本頁面)JS
- Oracle如何把一個表匯出匯入到另一個伺服器上的另一個表裡Oracle伺服器
- 將一個陣列複製到另一個陣列上陣列
- Android recyclerview刪除item重新整理列表AndroidView
- 動圖之一個圓繞另一個圓轉動
- substrate學習筆記3:新增一個Pallet到Runtime筆記
- 點選<a href>標籤無法跳轉到servlet的問題Servlet
- Flutter中如何進行介面跳轉Flutter
- RecyclerView增刪itemView
- vscode 跳轉到函式之後怎麼跳轉回之前的位置VSCode函式
- CTF學習(13)MISC(另一個世界)
- 七牛資料從一個桶轉移到另一個桶
- HDU 1671 字典樹(判斷是否有一個串是另一個串的子串)。
- MongoDB關聯另一個集合MongoDB