使用RecycleViewAdapter的变量

时间:2017-07-21 22:43:47

标签: java android

我在我的应用中使用了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();
    }
};

3 个答案:

答案 0 :(得分:0)

您正在更改适配器的goodCount方法中badCountonBindViewHolder()的值。但是,在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;  
            }
        });