如何像ListView一样实现RecyclerView onItemClick监听器,这是我的旧适配器类使用ListView:
public class GenreAdapter extends BaseAdapter {
....
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
if (v == null) {
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.textTitle = (TextView) v.findViewById(R.id.textTitle);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.textTitle.setText(genreArrayList.get(position).getTitle());
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putSerializable("data", genreArrayList);
bundle.putInt("current", position);
Intent intent …Run Code Online (Sandbox Code Playgroud) android onitemclicklistener android-5.0-lollipop recycler-adapter android-recyclerview
作为标题.我正在编写一个支持多选模式的自定义RecyclerView.我需要跟踪每个项目的选定/未选择状态.因此,在RecyclerView的数据大小发生变化之后.我想更新跟踪状态列表的大小.但我不知道在哪里重写方法:notifyDataSetChanged,notifyItemChagned ....
我有一系列,曾经被称为listViews,在我的应用程序中,现在是RecyclerViews.我很好奇提高模块性和减少我的应用程序的这一部分的重复的最有效的方法.
例如,我有GroupMemberFragment和FriendFragment,几乎相同RecyclerView.ViewHolders和RecyclerView.Adapters
重构的最佳方法是什么,以减少代码重复,但仍然允许每个相应的项目列表对其数据是唯一的,并且足够灵活,以便将来添加更多数据?
GroupMemberFragment:
public class GroupMemberFragment extends Fragment {
RecyclerView mRecyclerView;
ArrayList<Group> mGRoups;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.recycler_layout, container, false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view_layout);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
// Only things that need to change across all the list classes....
mGRoups = GroupListProvider.getInstance(getActivity()).getGroups();
mRecyclerView.setAdapter(new GroupAdapter(mGRoups));
return view;
}
// inner Class
private class GroupViewHolder …Run Code Online (Sandbox Code Playgroud) android android-viewholder recycler-adapter android-recyclerview
我想在Recyclerview Adapter类的Onlongclick中实现android底层表,但是试图长按我的recyclerview项,使其崩溃。
public class AddAtendanceAdapter extends
RecyclerView.Adapter<AddAtendanceAdapter.AttendanceViewHolder> {
public List<Details> dAttendance = Collections.emptyList();
private LayoutInflater inflater;
private static Context context;
private View v;
public AddAtendanceAdapter(Context context, List<Details> dAttendance) {
this.dAttendance = dAttendance;
this.context = context;
inflater = LayoutInflater.from(context);
}
@Override
public AttendanceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.student_item_row,
parent, false);
AttendanceViewHolder pvh = new AttendanceViewHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(AttendanceViewHolder holder, int postions) {
Details details = dAttendance.get(postions);
holder.StudentsName.setText(details.getStudentName());
Glide.with(context)
.load(details.getStudentImage())
.into(holder.stdImg);
}
@Override
public …Run Code Online (Sandbox Code Playgroud) android material-design recycler-adapter android-recyclerview
我有一个gridview项目,我可以增加或减少其值,发生的是当我更改项目的值并向下滚动屏幕并向后滚动我所做的更改已经消失,如果我向下滚动几次,我可以看到我再次做出的改变,我在这里失踪了什么?
public class SearchItemViewAdapter extends RealmSearchAdapter<Itens, SearchItemViewAdapter.ViewHolder> implements RealmChangeListener {
public SparseBooleanArray mSparseBooleanArray;
public SearchItemViewAdapter(Activity context, Realm realm, String filterColumnName) {
super(context, realm, filterColumnName);
mSparseBooleanArray = new SparseBooleanArray();
}
@Override
public void onChange() {
notifyDataSetChanged();
}
public RealmList<Itens> getCheckedItems() {
RealmList<Itens> mTempArry = new RealmList<>();
for (int i = 0; i < realmResults.size(); i++) {
if (mSparseBooleanArray.get(i)) {
mTempArry.add(realmResults.get(i));
}
}
return mTempArry;
}
public class ViewHolder extends RealmSearchViewHolder {
public SearchItemView itemView;
public ViewHolder(FrameLayout container, TextView footerTextView) {
super(container, …Run Code Online (Sandbox Code Playgroud) android realm android-adapter recycler-adapter android-recyclerview
我有一个VerticalGridView正在使用RecyclerView.Adapter填充元素。我发现onBindViewHolder()如果潜在元素不在视口中,则不会调用该方法。不幸的是,这是NullPointerException由另一种方法引起的,因为我TextView在该onBindViewHolder()方法中捕获了一个引用并将其传递给外部变量以供以后操作。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.txtCategoryName.setText(categories.get(position).getStrCategory());
categories.get(position).setTxtViewReference(viewHolder.txtCategoryDefectTotal);
viewHolder.categoryBoxRoot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(CategoryListItem catItem : categories){
if(catItem.getStrCategory().equals(viewHolder.txtCategoryName.getText())){
int index = Defects.getInstance().getCategories().indexOf(catItem) + 1;
MainInterface.grids.get(index).bringToFront();
MainInterface.grids.get(index).setVisibility(View.VISIBLE);
for(VerticalGridView grid : MainInterface.grids){
int gridIndex = MainInterface.grids.indexOf(grid);
if(gridIndex != index){
grid.setVisibility(View.INVISIBLE);
}
}
break;
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
据我了解,实例化对象TextView时会创建对gets 的引用Viewholder。
public class ViewHolder extends …Run Code Online (Sandbox Code Playgroud) 我正在使用Firebase-UI的FirebaseRecyclerAdapter.我无法在SearchView中实现过滤器.
我的数据库:
我的问题:
如何使用FirebaseRecyclerAdapter按字符搜索FirebaseDatabase?
(我想按用户名搜索)
我的代码:我用这种方法进行搜索,我的代码有什么问题?
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
Query Q = mAllUsersDatabaseRef.child("User").orderByChild("username").startAt(newText).endAt("~");
FirebaseRecyclerAdapter<User, SearchFeedFragment.AllRegisterUserViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<User, SearchFeedFragment.AllRegisterUserViewHolder>(
User.class, R.layout.row_search_all_users, SearchFeedFragment.AllRegisterUserViewHolder.class, Q) {
@Override
protected void populateViewHolder( SearchFeedFragment.AllRegisterUserViewHolder viewHolder,User model, int position) {
viewHolder.setUserName(model.getUsername());
viewHolder.setUserProfilePic(Common.stringToBitMap(model.getProfilepicurl()));
}
};
mRecyclerViewSearch.setAdapter(firebaseRecyclerAdapter);
return false;
}
});
public static class AllRegisterUserViewHolder extends RecyclerView.ViewHolder {
View mView;
ImageView mImgProfileImage = (ImageView) itemView.findViewById(R.id.iv_searchProfilePic);
TextView mTxtProfileName = (TextView) itemView.findViewById(R.id.txt_searchProfileName);
public …Run Code Online (Sandbox Code Playgroud) firebase searchview recycler-adapter android-recyclerview firebase-realtime-database
我想在加载recyclerview之后滚动到项目ID == 5,我直接设置项目ID setTargetPosition....如果有任何人有更好的线索,请帮助我.根据响应我想在加载recyclerview后直接滚动到三明治类别....
这是我的setAdapter代码;
try {
JSONArray jsonArray = arrayList.get(0);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jObj = jsonArray.getJSONObject(i);
String catName = jObj.getString("CategoryName");
String catId = jObj.getString("CategoryID");
Category cat1 = createCategory(catName, Integer.parseInt(catId));
JSONArray jProductDetails = jObj.getJSONArray("ProductDetails");
ArrayList<HashMap<String, String>> productdetaildata = new ArrayList<HashMap<String, String>>();
for (int j = 0; j < jProductDetails.length(); j++) {
JSONObject jP = jProductDetails.getJSONObject(j);
HashMap<String, String> map = new HashMap<String, String>();
map.put(HitUtilities.product_id, jP.getString("ProductID"));
map.put(HitUtilities.product_name, jP.getString("ProductName"));
map.put(HitUtilities.product_image, jP.getString("PhotoImagePath"));
map.put(HitUtilities.product_price, jP.getString("CurrentPrice"));
map.put(HitUtilities.product_isFavorite, …Run Code Online (Sandbox Code Playgroud) 最近,我在我的应用程序中发现了奇怪的崩溃。我发现它们是由ListAdapter-> DiffUtil下方引起的。合同规定,areContentsTheSame只有在对应项目areItemsTheSame返回true时,才会调用回调。问题是,areContentsTheSame被称为该项目areItemsTheSame从未被调用。
我正在对String产品进行测试,因此它不应与自己的回收器实施相关。如果是我的错(现在几乎没有逻辑)或DiffUtil工具中的错误,我真的很困惑
我已经创建了一个简单的仪器化测试,但在上述情况下失败了-更有经验的人可以看看一下:
package com.example.diffutilbug
import android.util.Log
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import junit.framework.Assert.assertTrue
import kotlinx.coroutines.*
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.BlockJUnit4ClassRunner
@RunWith(BlockJUnit4ClassRunner::class)
internal class ExampleUnitTest {
@Test
fun testDiffUtil4() {
val handler = CoroutineExceptionHandler { _, exception ->
throw exception
}
// adapter compare items :
// areItemsTheSame -> compare length of String
// areContentsTheSame -> …Run Code Online (Sandbox Code Playgroud) android listadapter android-support-library recycler-adapter androidx
我想在显示给用户后在RecylerView中检测每个项目。
基本上,我试图在每个项目加载到屏幕上后播放声音。
But I am not able to detect whenever each item is loaded on the screen! Is there any method I have to call to detect each item rendered
E.g 1st RecyclerView item displayed -> play sound
2st RecyclerView item displayed -> play sound...
Run Code Online (Sandbox Code Playgroud)
My Adapter class looks like this -
public class AdapterListAnimation extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Multiples> items = new ArrayList<>();
private Context ctx;
private OnItemClickListener mOnItemClickListener;
private int animation_type = 0;
.........
.........
Run Code Online (Sandbox Code Playgroud)
I …
java android android-viewholder recycler-adapter android-recyclerview
recycler-adapter ×10
android ×9
androidx ×1
firebase ×1
java ×1
listadapter ×1
realm ×1
searchview ×1
textview ×1