Sun*_*Sun 4 android android-5.0-lollipop recycler-adapter android-recyclerview
我RecyclerView在我的程序中使用,面对一些小问题,我相信你们中的一些人已经面对并解决了所有这些问题.
Separator color:使用DividerItemDecoration.java显示Items之间的分隔符,但如果我想更改分隔线颜色(如:默认为白色),则不知道在哪里进行更改
Clickable Row:点击仅在我连续点击文本时有效,但我想允许用户点击此链接后的任何地方(如:listview)
Wrap RecyclerView :我在recyclerview中只有两个记录,但它消耗全高(我想根据RecyclerView中的记录包装它,如:listview)
Ripple Effect:每当我点击RecyclerView中的任何项目时都没有获得RippleEffect,而当我点击列表项目获得Ripple效果时
RecyclerView Item Animation:当我点击RecyclerView中的任何项目时,如何实现动画效果
fragment_main.xml: -
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_rounded"/>
Run Code Online (Sandbox Code Playgroud)
adapter_main.xml: -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textTitle"
style="@style/AppTheme.ListTextView"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
styles.xml: -
<style name="AppTheme.ListTextView" parent="android:Widget.Material.TextView">
<item name="android:gravity">left</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:padding">10dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
btn_rounded.xml: -
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#008f8471"/>
<stroke android:width="2dp" android:color="#ffffff" />
<corners android:radius="10dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
MainAdatper.java:-
@Override
public void onBindViewHolder(MainHolder holder, final int position) {
.....
holder.mRootView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String strTitle = list.get(position).getTitle().toString();
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("title", strTitle);
context.startActivity(intent);
}
});
Run Code Online (Sandbox Code Playgroud)
MainFragment.xml: -
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_main, container, false);
/* Initialize recycler view */
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
list = new ArrayList<MainPoho>();
adapter = new MainAdapter(getActivity(), list);
mRecyclerView.setAdapter(adapter);
.......
}
Run Code Online (Sandbox Code Playgroud)
1.
首先,创建一个可绘制的xml文件,它将代表分隔符,如下所示:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white" /> <!-- or you could use hex i.e. #ffffff -->
<size android:height="1dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
然后将该分隔符设置为DividerItemDecoration这样:
new DividerItemDecoration(getResources().getDrawable(R.drawable.recycler_divider))
Run Code Online (Sandbox Code Playgroud)
2.
没有看到你如何膨胀你ViewHolder我不知道mRootView真正代表什么,但这是我通常采取的方法.我会像你一样创建项目视图,但有一些变化:
<?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"
android:orientation="vertical"
android:background="?attr/selectableItemBackground">
<!-- This will give your recycler item the ink ripple effect and touch state -->
<TextView
android:id="@+id/textTitle"
style="@style/AppTheme.ListTextView"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
然后在你的onBindViewHolder(...)方法中,你将要设置OnClickListener到itemView持有者中的对象,如下所示:
@Override
public void onBindViewHolder(MainHolder holder, final int position) {
.....
holder.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String strTitle = list.get(position).getTitle().toString();
/**
* Here is where I would typically create a java interface to use as a
* callback to the fragment/activity/whatever to take action rather
* than keeping this code in the adapter
*/
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("title", strTitle);
context.startActivity(intent);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这应该让您将整个单元格用作可点击区域+涟漪效果.
3.
使RecyclerView垂直包装其内容有点棘手.你必须LinearLayoutManager继承它并覆盖它的onMeasure(...)方法来强制它包装它的内容.请参阅此帖:https://stackoverflow.com/a/27616854/1623828
4.
看到我对#2的回答.您必须将要设置的视图的背景(或前景)赋予OnClickListener值,?attr/selectableItemBackground或者?attr/selectableItemBackgroundBorderless您希望波纹超出视图的边界.此值将在5.0+时使用墨水纹波选择器,并且在任何较低的平台上默认为标准无纹波选择器.但是,您可以创建自己的自定义波纹可绘制,但这需要更多参与.
文档:http://developer.android.com/training/material/animations.html#Touch
5.
什么样的动画?像,RecyclerView项目动画?对于那些您可以通过继承ItemAnimator并使用此方法应用它来创建自己的动画:
mRecyclerView.setItemAnimator(...)
Run Code Online (Sandbox Code Playgroud)
或者您可以使用默认实现:
mRecyclerView.setItemAnimator(new DefaultItemAnimator())
Run Code Online (Sandbox Code Playgroud)
否则,您是指使用活动转换在活动之间制作动画吗?如果是这样,您可以按照此处的文档来设置活动转换,但它们仅适用于Android 5.0+
| 归档时间: |
|
| 查看次数: |
1891 次 |
| 最近记录: |