android - 尽管调用了 adapterlist.clear() ,但有时会得到空的 RecyclerVew 项目
问题描述
我正在尝试在从 Web 服务获得的 recyclerview 中显示学生的详细信息。该应用程序的工作方式是在 Activity 中打开学生列表,然后在触摸学生时,它会打开另一个 Activity,该 Activity 将在回收站视图中显示该特定学生的详细信息。
问题:
我有时会在带有数据的有效项目上方或下方得到一个空的 recyclerview 项目。我试着打电话 StuDetailsDataAdapterClassList.clear();
,但它不能解决问题。有时它工作正常,但我不明白为什么会这样。你的帮助对我很有价值。
public class StudentDetailsActivity extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView recyclerView2;
RecyclerView.Adapter recyclerViewAdapter;
RecyclerView.Adapter recyclerViewAdapter2;
LinearLayoutManager recyclerViewlayoutManager;
RequestQueue requestQueue ;
RequestQueue requestQueue2 ;
List<StudentDataModel> StuDetailsDataAdapterClassList;
String stuIDForParse;
StudentDataModel GetStuDataModel = new StudentDataModel();
.....
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_personnel_details);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
collapsingToolbarLayout = (SubtitleCollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView4);
recyclerView2 =(RecyclerView)findViewById(R.id.recyclerView5);
recyclerViewlayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(recyclerViewlayoutManager);
StuDetailsDataAdapterClassList=new ArrayList<>();
LinearLayoutManager layoutManager
= new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
recyclerView2.setLayoutManager(layoutManager);
//I have a horizontal recyclerview below the vertical recyclerview. This is the layout manager for that recyclerview.
recyclerView2.setNestedScrollingEnabled(false);
//Set collapse & expanded title color
collapsingToolbarLayout.setExpandedSubtitleTextColor(getResources().getColor(R.color.divider));
setSupportActionBar(toolbar);
//Enable back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
....
//clearing list
StuDetailsDataAdapterClassList.clear();
PIC__WEB_CALL();
STU_WEB_CALL();
}
public void STU_WEB_CALL(){
String HTTP_SERVER_URL= String.format("http://www.student.com/%1$s",stuIDForParse);
JsonArrayRequest jsArrRequest = new JsonArrayRequest
(Request.Method.GET, HTTP_SERVER_URL, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
RES_PER_PARSE_DATA_AFTER_WEBCALL(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
}){
};
requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsArrRequest);
}
public void RES_PER_PARSE_DATA_AFTER_WEBCALL(JSONArray array){
for(int i = 0; i<array.length(); i++) {
JSONObject json = null;
try {
json = array.getJSONObject(i);
GetStuDataModel.setDob(json.getString("Date_Of_Birth"));
GetStuDataModel.setStuName(json.getString("Name"));
GetStuDataModel.setGradeName(json.getString("Grade"));
//Set the title on collapsing toolbar
collapsingToolbarLayout.setTitle(GetStuDataModel.getFullName());
} catch (JSONException e) {
e.printStackTrace();
}
}
if (array.length() != 0) {
StuDetailsDataAdapterClassList.add(GetStuDataModel);
collapsingToolbarLayout.setSubtitle(GetStuDataModel.getPerTitle());
recyclerViewAdapter = new StudentDetailsAdapter(StuDetailsDataAdapterClassList, this);
recyclerView.setAdapter(recyclerViewAdapter);
}
}
public void Horizontal_RecyclerView_WEB_CALL(){
//....more code
}
适配器
public class StudentDetailsAdapter extends RecyclerView.Adapter<StudentDetailsAdapter.ViewHolder> {
Context context;
public List<StudentDataModel> dataModels;
public StudentDetailsAdapter(List<StudentDataModel> getDataAdapter, Context context){
super();
Log.i("LPLP","I'm here");
this.dataModels = getDataAdapter;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.student_details_card, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final StudentDetailsAdapter.ViewHolder viewHolder, final int position) {
final StudentDataModel dataAdapter = dataModels.get(position);
viewHolder.grade.setText(dataAdapter.getGradeName());
viewHolder.stuName.setText(dataAdapter.getStuName());
viewHolder.dob.setText(dataAdapter.getDob());
}
@Override
public int getItemCount() {
return dataModels.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
public TextView grade;
public TextView stuName;
public TextView dob;
ConstraintLayout constraintLayout;
public ViewHolder(View itemView) {
super(itemView);
grade=(TextView)itemView.findViewById(R.id.textViewGrade);
stuName=(TextView)itemView.findViewById(R.id.textViewStuName);
dob=(TextView)itemView.findViewById(R.id.textViewDOB)
constraintLayout=(ConstraintLayout)itemView.findViewById(R.id.constrainLayout);
}
}
}
解决方案
推荐阅读
- reactjs - Redux 传奇正在返回不是我操作的有效渠道
- android - 没有 ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION 权限的 android 11 拆分文件崩溃
- kotlin - 如何将数据从 BottomSheetFragment 传递到另一个片段?
- mongodb - 为什么我不能在我的 mongoDB 中引用 React Native 中的嵌套对象?
- javascript - 如何在模态框内设置 div 的高度以使其滚动?
- python - 在我的 python 程序旁边运行 bash
- azure-maps - Azure Maps - 无法在没有浏览器警告的情况下从点属性设置图层选项“偏移”
- android - 透明导航栏留下一个黑框
- python - 如何在 Selenium 中顺利运行多个 Headless Chrome 实例?
- sql - Postgres 中的数据类型“smallserial”未在 Visual Studio Code 中突出显示