Recyclerview的一些個人理解與使用(二)實現一個簡單的列表介面
阿新 • • 發佈:2019-02-09
公司專案前一段時間有些忙 ,忙完後趕緊就來寫下了這篇文章,上次的文章
中,我們對Recyclerview進行了一個基礎的封裝,這次我們就用上次的封裝實現一個最簡單的Recyclerview。
先來看看效果圖
一個簡單的列表。下面是佈局檔案:
先是介面佈局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.ztn.recyclerviewdemo.MainActivity">
<RelativeLayout
android:id="@+id/main_activity_recyclerview_rl"
android:layout_width ="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/main_activity_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView >
</RelativeLayout>
</LinearLayout>
然後是item的佈局檔案
<?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="wrap_content">
<TextView
android:id="@+id/simple_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="5dp"
android:textSize="14sp"/>
</LinearLayout>
然後是程式碼
在MainActivity中有個Recyclerview,我們對控制元件進行初始化。
/**
* Created by ztn on 2017/3/28
*
* @see MainActivity
*/
public class MainActivityHolder extends BaseViewFinder {
RecyclerView recyclerView;
protected MainActivityHolder(Activity activity) {
super(activity);
recyclerView = (RecyclerView) activity.findViewById(R.id.main_activity_recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(activity));
}
}
BaseViewFinder我放在了common中
/**
* * Created by ztn on 2017/3/28
* <p>
* 所有activity的介面holder都繼承這個Base,以便於介面功能分離 ,記得在app的gradle中,對common進行依賴
*/
public abstract class BaseViewFinder {
protected Activity activity;
protected BaseViewFinder(Activity activity) {
this.activity = activity;
}
}
MainActivity介面程式碼:
/**
* Created by ztn on 2017/3/28
*/
public class MainActivity extends BaseActivity {
MainActivityHolder mainActivityHolder;
List<String> main;
MainRecyclerViewAdapter mainRecyclerViewAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainActivityHolder = new MainActivityHolder(this);
main = new ArrayList<>();
main.add("簡單的RecyclerView");
for (int i = 0; i < 40; i++) {
main.add(i + "");
}
mainRecyclerViewAdapter = new MainRecyclerViewAdapter(getContext(), main);
mainActivityHolder.recyclerView.setAdapter(mainRecyclerViewAdapter);
mainRecyclerViewAdapter.notifyDataSetChanged();
mainRecyclerViewAdapter.setOnClickItemListener(new MainRecyclerViewAdapter.OnClickItemListener() {
@Override
public void onClick(String string, int position) {
if (position == 0) {
Toast.makeText(getContext(), "本介面就是一個簡單的Recyclerview", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getContext(), "準備中的Recyclerview", Toast.LENGTH_SHORT).show();
}
}
});
}
}
BaseActivity是為了快速拿到當前介面的Context,也放在了common中,程式碼如下
/**
* 上層基類
* Created by ztn on 2017/3/28
*/
@SuppressLint("Registered")
public class BaseActivity extends AppCompatActivity {
public BaseActivity getContext() {
return this;
}
}
接下來就是最重要的adapter。adapter確定了接收資料型別,確定了點選時需要用到的資料。
/**
* Created by ztn on 2017/3/28
*/
public class MainRecyclerViewAdapter extends SimpleRecycleViewAdapter<String, MainRecyclerViewHolder> {
private OnClickItemListener onClickItemListener;
//接收String型別資料
public MainRecyclerViewAdapter(Context context, List<String> listData) {
super(context, listData);
}
/**
* 建立View
*
* @param parent
* @return
*/
@Override
protected MainRecyclerViewHolder onCreateItemViewHolder(ViewGroup parent) {
return new MainRecyclerViewHolder(inflater.inflate(R.layout.a_simple_text_view, parent, false));
}
public void setOnClickItemListener(OnClickItemListener onClickItemListener) {
this.onClickItemListener = onClickItemListener;
}
/**
* 給View設定資料
*
* @param mainRecyclerViewHolder
* @param position
*/
@Override
protected void onBindItemViewHolder(MainRecyclerViewHolder mainRecyclerViewHolder, int position) {
mainRecyclerViewHolder.initView(context, listData.get(position), onClickItemListener,position);
}
/**
* 便於實現點選事件
*/
public interface OnClickItemListener {
void onClick(String string, int position);
}
}
adapter對應的holder,我們在holder中對於接收到的資料進行處理,可以根據需求,在initView中加入需要的引數,這裡我對於資料,與資料點選,與資料所在位置進行了處理,目前需要這三個引數。
/**
* Created by ztn on 2017/3/28
*/
public class MainRecyclerViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public MainRecyclerViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.simple_tv);
}
public void initView(Context context, final String string, final MainRecyclerViewAdapter.OnClickItemListener onClickItemListener, final int position) {
textView.setText(string);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onClickItemListener != null)
onClickItemListener.onClick(string, position);
}
});
}
}
這樣我們就實現了一個簡單的列表。
最近在研究git,準備到時候提交一個完整的專案到上面以便於大家參照。到時候我會貼出專案地址。
專案地址
如有疑問大家可以新增 121606151 這個qq群@Crazy(即本人)即可,歡迎大家前來交流。