java RecylerView并没有在片段中出现
在我的片段中,recyclerview没有出现。当我尝试在我的活动中按预期填充结果时,但在我的片段中,当我启动recyclerview时,它没有显示空白。 是,我的适配器中有getItemCount(它已经在同一适配器的othr活动中工作) 我的片段初始化
public static ProfileSearchFragment newInstance(String searchText,String algoliaKey, String applicationId) {
ProfileSearchFragment fragment = new ProfileSearchFragment();
Bundle args = new Bundle();
args.putString(SearchText, searchText);
args.putString(AlgoliaKey, algoliaKey);
args.putString(ApplicationId, applicationId);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mSearchText = getArguments().getString(SearchText);
mAlgoliaKey = getArguments().getString(AlgoliaKey);
mApplicationId = getArguments().getString(ApplicationId);
}
}
在onCreateView和onViewCreated中都尝试过:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_profile_search, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RecyclerView recyclerView = view.findViewById(R.id.profile_search_recyclerview);
Log.d(TAG, "onCreateView: getting the Searchtext hopefully " + mSearchText + ":" + mAlgoliaKey);
mUserImage = new ArrayList<>();
mUserName = new ArrayList<>();
mUserId = new ArrayList<>();
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
linearLayoutManager.setSmoothScrollbarEnabled(true);
recyclerView.setLayoutManager(linearLayoutManager);
userSearchAdapter = new UserSearchAdapter(getContext(),mUserImage,mUserName,mUserId);
recyclerView.setAdapter(userSearchAdapter);
final Client client = new Client(mApplicationId, mAlgoliaKey);
final Index index = client.getIndex("Users");
if (mSearchText!=null){
Query query = new Query(mSearchText)
.setAttributesToRetrieve("user_username", "user_image_url", "user_id")
.setHitsPerPage(50);
index.searchAsync(query, new CompletionHandler() {
@Override
public void requestCompleted(JSONObject content, AlgoliaException error) {
try {
JSONArray hits = content.getJSONArray("hits");
List<String> list = new ArrayList<>();
for (int i = 0; i < hits.length(); i++) {
JSONObject jsonObject = hits.getJSONObject(i);
mUserName.add(jsonObject.getString("user_username"));
Log.d(TAG, "requestCompleted: Userrrrr: " + jsonObject.getString("user_username"));
mUserImage.add(jsonObject.getString("user_image_url"));
mUserId.add(jsonObject.getString("user_id"));
Log.d(TAG, "requestCompleted: Size: " + mUserImage.size());
userSearchAdapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
当我记录时,我会得到数组的大小,并用值填充数组
在我的主要活动中,我使用viewpager2来设置我的片段
private void setUpViewPager(){
SectionPagerAdapter adapter = new SectionPagerAdapter(this);
adapter.addFragment(new ProfileSearchFragment());
adapter.addFragment(new TemplateSearchTagsFragment());
ViewPager2 viewPager2 = findViewById(R.id.search_viewpager);
viewPager2.setAdapter(adapter);
}
@Override
public void afterTextChanged(Editable editable) {
ProfileSearchFragment fragment = ProfileSearchFragment.newInstance(editable.toString(),algoliaKey,applicationId);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.addToBackStack(null);
transaction.add(fragment,"profile_search_fragment").commit();
}
});
谁能帮我指出错误吗。谢谢
我的适配器:
public class UserSearchAdapter extends RecyclerView.Adapter<UserSearchAdapter.SearchViewHolder> {
private static final String TAG = "UserSearchAdapter";
private Context mContext;
private ArrayList<String> mUserImage = new ArrayList<>();
private ArrayList<String> mUserName = new ArrayList<>();
private ArrayList<String> mUserId = new ArrayList<>();
public UserSearchAdapter(Context mContext, ArrayList<String>
mUserImage, ArrayList<String> mUserName, ArrayList<String> mUserId) {
this.mContext = mContext;
this.mUserImage = mUserImage;
this.mUserName = mUserName;
this.mUserId = mUserId;
}
@NonNull
@Override
public SearchViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.user_item,parent,false);
SearchViewHolder holder = new SearchViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final SearchViewHolder holder, final int position) {
Glide.with(mContext)
.load(mUserImage.get(position))
.placeholder(R.drawable.ic_profile)
.into(holder.image_profile);
holder.btn_follow.setVisibility(View.VISIBLE);
holder.username.setText(mUserName.get(position));
}
@Override
public int getItemCount() {
return mUserName.size();
}
class SearchViewHolder extends RecyclerView.ViewHolder{
private TextView username,fullname;
private CircleImageView image_profile;
private Button btn_follow;
public SearchViewHolder(@NonNull View itemView) {
super(itemView);
username = itemView.findViewById(R.id.username);
fullname = itemView.findViewById(R.id.fullname);
image_profile = itemView.findViewById(R.id.image_profile);
btn_follow = itemView.findViewById(R.id.btn_follow);
}
}
我的日志打印:
2020-06-26 17:56:36.0143620-3620/com。湿婆。memesapp D/ProfileSearchFragment:requestCompleted:Size:1
2020-06-26 17:56:36.0143620-3620/com。湿婆。memesapp D/ProfileSearchFragment:requestCompleted:Userrrrr:Algolia2 2020-06-26 17:56:36.0143620-3620/com。湿婆。memesapp D/ProfileSearchFragment:requestCompleted:Size:2
2020-06-26 17:56:36.0143620-3620/com。湿婆。memesapp D/ProfileSearchFragment:requestCompleted:Userrrrr:Giraffe 2020-06-26 17:56:36.0143620-3620/com。湿婆。memesapp D/ProfileSearchFragment:requestCompleted:Size:3
2020-06-26 17:56:36.0143620-3620/com。湿婆。memesapp D/ProfileSearchFragment:requestCompleted:Userrrrr:zumba 2020-06-26 17:56:36.0143620-3620/com。湿婆。memesapp D/ProfileSearchFragment:requestCompleted:Size:4
# 1 楼答案
请检查您的适配器实现
userSearchAdapter.notifyDataSetChanged();
在for循环中被多次调用。请把它移到for循环之外。一旦数据集准备好。更新适配器,然后通知更改。目前,您刚刚创建了一个空的list
。你不能在任何地方使用它。如果我理解正确,您将用必填项填写此列表,并将其传递给适配器以供显示# 2 楼答案
您正在使用空数组列表初始化RV适配器,稍后在回调方法中获取数据时
您没有将数据设置到适配器
RV适配器中应该有一种方法,如
然后你给notifyDataSetChanged打电话
在适配器上