gpt4 book ai didi

java - Fragment 中的 RecyclerView 有时在 BottomNavigationView 项目触摸时为空

转载 作者:搜寻专家 更新时间:2023-11-01 09:36:13 24 4
gpt4 key购买 nike

我的 Fragment (FrameLayout) 中的 RecyclerView 有时在 BottomNavigationView 项触摸时为空(有时您可以触摸5 倍,它不是空的,但在下一次触摸之前它又是空的)。

YouTube fragment

public class YouTuberFragment extends Fragment {

private List<YouTuber> youtuber;

private class GetYouTuber extends AsyncTask<Void, Void, Void> {

@Override
protected void onPreExecute() {
super.onPreExecute();
}

@Override
protected Void doInBackground(Void... arg0) {
try {
InputStream inputStream = getActivity().getAssets().open("youtuber.json");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;

while ((line = bufferedReader.readLine()) != null) total.append(line);

String m = total.toString();
JSONObject jsonObject = new JSONObject(m);
JSONArray jsonYouTuberArray = jsonObject.getJSONArray("youtuber");

int youTubersCount = 0;
if (jsonYouTuberArray != null) youTubersCount = jsonYouTuberArray.length();

for (int i = 0; i < youTubersCount; i++) {
JSONObject jsonYouTuberObject = jsonYouTuberArray.getJSONObject(i);

YouTuber youTuber = new YouTuber(
jsonYouTuberObject.getString("name"),
jsonYouTuberObject.getString("role"),
jsonYouTuberObject.getString("picture"),
jsonYouTuberObject.getString("episodes"),
jsonYouTuberObject.getString("youtube")
);

youtuber.add(youTuber);
}
} catch (JSONException | IOException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}

public YouTuberFragment() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_youtuber, container, false);

LinearLayoutManager llm = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
youtuber = new ArrayList<>();
RVAdapter adapter = new RVAdapter(youtuber, getContext());

new YouTuberFragment.GetYouTuber().execute();

RecyclerView rv = (RecyclerView) v.findViewById(R.id.rv);
rv.setLayoutManager(llm);
rv.setHasFixedSize(true);
rv.setAdapter(adapter);

return v;
}

}

RVAdapter

class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {

private final Context context;
private Resources res;
private List<YouTuber> youTuber;
RVAdapter(List<YouTuber> youTuber, Context context){
this.youTuber = youTuber;
this.context = context;
}

static class PersonViewHolder extends RecyclerView.ViewHolder {
CardView cv;
ImageView ytPicture;
TextView ytName;
TextView ytRole;
TextView ytEpisodes;
Button ytYoutube;

PersonViewHolder(View itemView) {
super(itemView);

cv = (CardView) itemView.findViewById(R.id.cv);
ytPicture = (ImageView) itemView.findViewById(R.id.yt_picture);
ytName = (TextView) itemView.findViewById(R.id.yt_name);
ytRole = (TextView) itemView.findViewById(R.id.yt_role);
ytEpisodes = (TextView) itemView.findViewById(R.id.yt_episodes);
ytYoutube = (Button) itemView.findViewById(R.id.yt_youtube);
}
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_youtuber, viewGroup, false);
res = v.getResources();
PersonViewHolder pvh = new PersonViewHolder(v);
return pvh;
}

@Override
public void onBindViewHolder(final PersonViewHolder personViewHolder, final int i) {
personViewHolder.ytPicture.setImageResource(res.getIdentifier(youTuber.get(i).picture, "drawable", BuildConfig.APPLICATION_ID));
personViewHolder.ytName.setText(youTuber.get(i).name);
personViewHolder.ytRole.setText(youTuber.get(i).role);
personViewHolder.ytEpisodes.setText(res.getString(R.string.yt_episodes, youTuber.get(i).episodes));
personViewHolder.ytYoutube.setText(youTuber.get(i).youtube);

personViewHolder.ytYoutube.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri = Uri.parse("https://" + youTuber.get(i).youtube);

Intent youtube_url = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(youtube_url);
}
});
}

@Override
public int getItemCount() {
return youTuber.size();
}
}

最佳答案

这可能是因为您正在运行另一个线程来收集数据,而您的适配器初始化正在主线程上运行并在可以检索数据之前进行渲染。如果设备是空白的,您是否尝试过旋转设备?

关于java - Fragment 中的 RecyclerView 有时在 BottomNavigationView 项目触摸时为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43020771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com