您的位置:首页 > 其它

Recyclerview的一些个人理解与使用(二)实现一个简单的列表界面

2017-04-05 15:53 986 查看
目录:

Recyclerview的一些个人理解与使用(一)adapter的简单封装

Recyclerview的一些个人理解与使用(二)实现一个简单的列表界面

Recyclerview的一些个人理解与使用(三)列表中的计时器

Recyclerview的一些个人理解与使用(四)在界面中实现侧边栏效果

Recyclerview的一些个人理解与使用(五)Recyclerview的联动,时间选择的实现

Recyclerview的一些个人理解与使用(六)Recyclerview的分段加载

Recyclerview的一些个人理解与使用(七)Recyclerview的嵌套与增加删除

公司项目前一段时间有些忙 ,忙完后赶紧就来写下了这篇文章,上次的文章

http://blog.csdn.net/ljwztn/article/details/64439879

中,我们对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,准备到时候提交一个完整的项目到上面以便于大家参照。到时候我会贴出项目地址。

项目地址

https://github.com/Liveinadream/RecyclerViewDemo#recyclerviewdemo

如有疑问大家可以添加 121606151 这个qq群@Crazy(即本人)即可,欢迎大家前来交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐