我在我的应用中使用了RecyclerView,我想在RecycleViewAdapter
课程中设置一个计数器,并在MainActivity
中获取其值。
我设置了2个公共变量,我使用调试器查看计数器值是否为chnages,并且确实计数正确。
问题是当我在MainActivity
中检查计数器的值时,值为0,看起来根本没有计数或RecycleViewAdapter
的实例再次初始化,但它没有'吨。
希望你能帮助我解决这个问题,这真的很奇怪 这是我的代码:
public class RecycleViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
private List<User> userList;
private Context context;
public int goodCount;
static public int badCount;
public RecycleViewAdapter(Context context, List<User> userList)
{
this.userList = userList;
this.context = context;
}
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null);
RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
return rcv;
}
@Override
public void onBindViewHolder(RecyclerViewHolders holder, int position) {
holder.tvName.setText(userList.get(position).name);
if(userList.get(position).result.equals("good")) {
holder.itemView.setBackgroundColor(ContextCompat.getColor(context, R.color.good));
goodCount++;
}
else if(userList.get(position).result.equals("bad")){
holder.itemView.setBackgroundColor(ContextCompat.getColor(context, R.color.bad));
badCount++;
}
}
@Override
public int getItemCount() {
return this.userList.size();
}
}
这是MainActivity
类的一部分,我使用了recAdapter(在类中定义,我没有附加整个类):
final Response.Listener<String> onPostsLoaded = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
dialog.dismiss();
mainIcon.setVisibility(View.GONE);
userList = Arrays.asList(gson.fromJson(response, User[].class));
recAdapter = new RecycleViewAdapter(MainActivity.this ,userList);
recyclerView.addItemDecoration(new DividerItemDecoration(MainActivity.this, LinearLayoutManager.VERTICAL));
recyclerView.setAdapter(recAdapter);
int num = recAdapter.goodCount;
Snackbar.make(findViewById(android.R.id.content), String.valueOf(num), Snackbar.LENGTH_LONG)
.show();
}
};
答案 0 :(得分:0)
您正在更改适配器的goodCount
方法中badCount
和onBindViewHolder()
的值。但是,在onResponse()
方法中,您正在创建适配器,将其分配给RecyclerView
,然后立即调用int num = recAdapter.goodCount;
。
此时适配器尚未自行放置或绑定任何视图,因此onBindViewHolder()
尚未调用,计数器将为零。
答案 1 :(得分:0)
嗯,是的,确实如此。RecycleViewAdapter的实例再次初始化,但它没有。
// Sets the value back to zero
recAdapter = new RecycleViewAdapter(MainActivity.this ,userList);
如果你想要相同的适配器,你需要这样做。
final Response.Listener<String> onPostsLoaded = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
dialog.dismiss();
mainIcon.setVisibility(View.GONE);
// Don't recreate the adapter, just update the data
userList.clear();
userList.addAll(Arrays.asList(gson.fromJson(response, User[].class)));
recAdapter.notifyDataSetChanged();
int num = recAdapter.goodCount;
Snackbar.make(findViewById(android.R.id.content), String.valueOf(num), Snackbar.LENGTH_LONG)
.show();
}
然而,为什么你需要字段并不是很清楚。只是做一些其他方法。
public int getGoodCount() {
int count = 0;
for (User u : this.userList) {
if (u.result.equals("good")) count += 1;
}
return count;
}
// Assuming there is only good and bad
public int getBadCount() {
return getItemCount() - getGoodCount();
}
答案 2 :(得分:-1)
你正在立即调用count并且recylerview还没有。使用此代码得到计数。我测试了它的工作原理
recyclerView.post(new Runnable() {
@Override
public void run() {
int num = recAdapter.goodCount;
}
});