我开始修改我的应用程序以支持Lollipop。基本上,我有一个带有RecyclerView的文件浏览器片段。当用户打开此片段时,他将看到根目录上所有的文件夹。当用户点击文件夹时,我需要获取所有子文件夹和文件,并使用相同的RecyclerView将它们显示给用户,使用notifydatachanged方法。功能正常工作,问题是当用户单击文件夹时,波纹效果在notifydatachanged期间没有保留。
file_item.xml
file_item.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/file_name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:drawablePadding="15dp"
android:ellipsize="marquee"
android:focusable="true"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingLeft="14dip"
android:paddingRight="15dip"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?android:attr/textColorAlertDialogListItem" />
RecyclerView 适配器:
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.CustomViewHolder>{
private List<Item> _data;
private Context _context;
private IFileListener _listener;
public RecycleAdapter(Context context, List<Item> data,IFileListener listener) {
_data = data;
_context = context;
_listener = listener;
}
public void setData(List<Item> data)
{
_data = data;
notifyDataSetChanged();
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(_context).inflate(R.layout.file_item, viewGroup,false);
CustomViewHolder viewHolder = new CustomViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(CustomViewHolder customViewHolder, int i) {
final Item file = _data.get(i);
//Setting text view title
customViewHolder.textView.setText(file._fileName);
customViewHolder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
_listener.onFileClickListener(file._fileName);
}
});
// customViewHolder.textView.setOnTouchListener(new View.OnTouchListener() {
// @Override
// public boolean onTouch(View v, MotionEvent event) {
//
// switch (event.getActionMasked())
// {
// case MotionEvent.ACTION_UP:
// _listener.onFileClickListener(file._fileName);
// break;
// }
// return false;
// }
// });
// customViewHolder.textView.setOnTouchListener(new View.OnTouchListener() {
// @TargetApi(Build.VERSION_CODES.LOLLIPOP)
// @Override
// public boolean onTouch(View v, MotionEvent event) {
// v.getBackground().setHotspot(event.getX(), event.getY());
//
// return(false);
// }
// });
if (file._isFolder) {
customViewHolder.textView.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.directory_icon, 0, 0, 0);
} else {
customViewHolder.textView.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.file_icon, 0, 0, 0);
}
}
@Override
public int getItemCount() {
return (null != _data ? _data.size() : 0);
}
public class CustomViewHolder extends RecyclerView.ViewHolder
{
protected TextView textView;
public CustomViewHolder(View view) {
super(view);
this.textView = (TextView) view.findViewById(R.id.file_name);
}
}
public interface IFileListener
{
public void onFileClickListener(String file);
}
}