我正在使用带有普通TextView的283项的Recycler View来过滤列表.
我想一直只显示10条记录.
我不能使用getCount(或GetItemCount)因为当我过滤列表它给我IndexOutOfBoundsExceptions时,有没有其他方法可以做到这一点?
public class RealmAutoCompleteAdapter extends RecyclerView.Adapter<RealmAutoCompleteAdapter.ProductViewHolder> {
Realm realm;
RealmChangeListener<RealmResults<FieldsItem>> realmChangeListener;
RealmResults<FieldsItem> items;
String searchTerm;
public RealmAutoCompleteAdapter(Realm realm, RealmResults<FieldsItem> items) {
this.realm = realm;
this.realmChangeListener = new RealmChangeListener<RealmResults<FieldsItem>>() {
@Override
public void onChange(RealmResults<FieldsItem> results) {
notifyDataSetChanged();
}
};
this.items = items;
items.addChangeListener(realmChangeListener);
}
@Override
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ProductViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.autocomplete_row, parent, false));
}
@Override
public void onBindViewHolder(ProductViewHolder holder, int position) {
FieldsItem item = items.get(position);
holder.title.setText(item.getTitle());
}
public void updateInput(String input) {
this.searchTerm …Run Code Online (Sandbox Code Playgroud) 我只是使用以下方法在“数据”列表上进行左右滑动,所以效果很好。并且我想知道如何对数据列表中的某些行禁用滑动操作。例如:有些数据用户不应删除。我想限制那些行。
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
//Remove swiped item from the list and notify the RecyclerView
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
}
};
Run Code Online (Sandbox Code Playgroud) 我正在使用回收站视图实现导航栏,通过参考网站上提供的代码:http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html
在MainActivity.java中,调用以下行.
mAdapter = new MyAdapter(TITLES,ICONS,NAME,EMAIL,PROFILE);
mRecyclerView.setAdapter(mAdapter);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
Run Code Online (Sandbox Code Playgroud)
我想知道在MyAdapter.java中以什么顺序调用哪些函数?这是MyAdapter.java的代码
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private static final int TYPE_HEADER = 0; // Declaring Variable to Understand which View is being worked on
// IF the view under inflation and population is header or Item
private static final int TYPE_ITEM = 1;
private String mNavTitles[]; // String Array to store the …Run Code Online (Sandbox Code Playgroud) 我遇到了一个关于将OnItemClickListener设置为我的RecyclerView项目的问题.我尝试按照Android Studio的RecyclerView示例中描述的方式设置监听器.因此,在我的RecyclerView的ViewHolder类中设置了一个监听器.
public class ProgramViewHolder extends RecyclerView.ViewHolder {
protected TextView vName;
protected ImageView vProgramImage;
public ProgramViewHolder(View v) {
super(v);
vName = (TextView) v.findViewById(R.id.programName);
vProgramImage = (ImageView) v.findViewById(R.id.programImage);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// HERE PROBLEM !!
MainActivity.openSettings(1);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想调用我的MainActivity openSettings(int)的方法来加载片段:
public void openSettings(int layoutId) {
settingsFragment setFrag = new settingsFragment();
Bundle information = new Bundle();
information.putInt("layoutId", layoutId);
setFrag.setArguments(information);
getFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, setFrag)
.commit();
}
Run Code Online (Sandbox Code Playgroud)
但现在问题.当我尝试编译时,它说"非静态方法'openSettings(int)'不能从静态上下文中引用." 我完全不明白这个错误.为什么它是一个静态的上下文?ProgramViewHolder类不会声明为static.
最重要的部分:我该如何解决?我想为RecyclerView的每个项目设置一个OnClickListener,并调用MainActivity的公共方法.
非常感谢你,花时间来帮助我.
所以这是我的RecyclerView的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/bikename_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是由RecyclerView的适配器充气的布局.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/bikenames_cardview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/bikenames_imageview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/bikenames_name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.v7.widget.CardView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
所以在这里我需要在我的Activity或RecyclerView适配器中找到CardView(@ id/bikenames_cardview)的宽度.我也写了RecyclerView适配器.
适配器代码
public class BikeNamesAdapter extends RecyclerView.Adapter<BikeNamesViewHolder> {
BikeNames bikeNames;
Context context;
public BikeNamesAdapter(BikeNames bikeNames) {
this.bikeNames = bikeNames;
}
@Override
public int getItemCount() {
return bikeNames.getLength();
}
@Override
public BikeNamesViewHolder onCreateViewHolder(ViewGroup …Run Code Online (Sandbox Code Playgroud) 我正在构建一个正常的聊天应用程序.可以发送图像,文本和视频,因此我的列表中需要多种行样式.我使用listview.但是Listview多次返回(在回收行之后)错误的行并且我的尝试失败了.任何想法怎么做?可以使用RecyclerView完成吗?谢谢.
当我的应用程序关闭并重新打开时,我有一个包含许多元素的recyclelerview,我希望使用SharedPreferences保存这些元素.我的数组的代码如下.
public ArrayList<MyInformation> getDataSet() {
ArrayList results = new ArrayList<MyInformation>();
return results;
}
Run Code Online (Sandbox Code Playgroud)
(我在myAdapter中将内容添加到recyclerview中)
public void addEntity(int i, MyInformation entity) {
information.add(i, entity);
notifyItemInserted(i);
}
Run Code Online (Sandbox Code Playgroud)
那么,当我关闭应用程序时,如何保存此数组呢?谢谢!
我正在使用带卡片视图和recyclerview的列表.我为列表添加了适配器并添加了getItemCount方法.我想为我的列表添加搜索功能.所以我也添加了一个过滤器.但是当我在搜索视图中输入时,我在返回ItemList.size()时遇到异常; 这条线..我错过了什么?
适配器
public class ItemAdapter extends RecyclerView.Adapter<ListViewHolder> implements Filterable{
public ItemsFilter itemFilter;
ArrayList<Item> mStringFilterList;
private ArrayList<Item> ItemList;
private Context context;
private MyItemClickListener mItemClickListener;
private MyItemLongClickListener mItemLongClickListener;
public ItemAdapter(Context context,ArrayList<Item> ItemList) {
this.context= context;
this.ItemList = ItemList;
}
@Override
public ListViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_layout, null);
ListViewHolder mh = new ListViewHolder(v);
return mh;
}
@Override
public void onBindViewHolder(final ListViewHolder ListViewHolder, int i) {
Item Item = ItemList.get(i);
ListViewHolder.textName.setText(Item.getItem_name());
ListViewHolder.textDesc.setText(Item.getItem_desc());
ListViewHolder.textQty.setText(Item.getItem_qty());
ListViewHolder.textName.setOnClickListener(new View.OnClickListener() {
@Override
public …Run Code Online (Sandbox Code Playgroud) 我正在尝试RecyclerView使用Helper扩展的类在我的行中创建动画ItemTouchHelper.Callback.
默认的"滑动"行为ItemTouchHelper是,如果以足够的速度滑动一行,它将从视图中消失(即,滑动到dimiss).在我的情况下,我想创建一个动画,如果发生这样的事件,导致行直接反弹.
我已经能够创建一个ValueAnimator动画,如果它在屏幕上滑动,将该行动画回视图.但是,问题在于我无法让父ItemTouchHelper类识别x它存储的值已从行的宽度(因此它完全在屏幕外)更改为0(以便它返回到屏幕上).
这意味着每当我在完成自定义动画后与行进行交互时,它就像行仍然在屏幕外,即使它完全可见.这通常意味着按下它意味着行从一个X位置跳到行宽0的X位置,因此再次从屏幕边缘重新生成动画.在完全重置并再次正常运行之前,它会执行此操作几次.
该视频将有助于显示问题.由于前两次滑动不在屏幕外,因此默认行为有效.然后将行从屏幕上滑下并反弹回来,点击该行会显示它从右边缘向后ping:
这是我用来进行动画的代码:
public class CustomItemTouchHelper extends ItemTouchHelper.Callback {
private RecoverAnimation ra;
private boolean animatorRunning;
//...
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
final float per = (dX/viewHolder.itemView.getWidth());
if (per > 0.8F && !animatorRunning && !isCurrentlyActive) {
ra = new RecoverAnimation(c, recyclerView, viewHolder, ItemTouchHelper.ANIMATION_TYPE_SWIPE_CANCEL, …Run Code Online (Sandbox Code Playgroud) 我已经实现了CardView使用代码RecyclerView.我的清单有15个项目,现在我想更改CardView列表中的每个奇怪的背景颜色.请为我提供正确的代码CardView.我尝试过简单的奇数偶数代码.这是代码:
在onBindViewHolder方法中:
@Override
public void onBindViewHolder(final DataHolder holder, int position) {
holder.tv1.setText(result[position]);
imageLoader.displayImage("drawable://" + imgs[position], holder.iv1, options);
for(int i =0; i <= imgs.length;i+=2)
{
holder.cv1.setCardBackgroundColor(R.color.colorAccent);
}
}
Run Code Online (Sandbox Code Playgroud)