java - 尝试将 recylerview 添加到 fragment 时未找到资源异常

标签 java android android-fragments android-recyclerview

我正在尝试添加 recyclerviewfragment ,但不知何故, adapter 中恰好出现错误。 .

我认为这是我绑定(bind)它的方式,我无法找出解决方案。有人可以帮我解决这个问题吗?

这是我的适配器:

public class MyLeaguesListAdapter extends 
    RecyclerView.Adapter<MyLeaguesListAdapter.MyViewHolder>{

    List<MyContest> listItems;
    Context context;
    public interface OnItemClickListener {
        void onItemClick(View v,int pos);

    }
    public MyLeaguesListAdapter(List<MyContest> listItems,Context context){
        this.listItems = listItems;
        this.context = context;
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v;
        v = LayoutInflater.from(context).inflate(R.layout.my_contest_item,parent,false);

        MyViewHolder myViewHolder = new MyViewHolder(v);
        return myViewHolder;

    }
    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        public TextView leagueName,playerName,prizePool,playerRank,playerPoints,entryFee,spots;
        OnItemClickListener onItemCheckListener;

        public MyViewHolder(View itemView) {
            super(itemView);
            leagueName = (TextView) itemView.findViewById(R.id.mc_contest_name);
            playerName = (TextView) itemView.findViewById(R.id.mc_player_name);
            prizePool = (TextView) itemView.findViewById(R.id.mc_prize_pool);
            playerRank = (TextView) itemView.findViewById(R.id.mc_player_rank);
            playerPoints = (TextView) itemView.findViewById(R.id.mc_player_points);
            entryFee = (TextView) itemView.findViewById(R.id.mc_entry_fee);
            spots = (TextView) itemView.findViewById(R.id.mc_spots);
            itemView.setOnClickListener(this);
        }
        public void setItemClickListener(OnItemClickListener ic){
            this.onItemCheckListener = ic;
        }

        @Override
        public void onClick(View view) {
            this.onItemCheckListener.onItemClick(view,getAdapterPosition());
        }
    }
    @Override
    public int getItemCount() {
        return listItems.size();
    }
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        MyContest listItem = listItems.get(position);
        holder.leagueName.setText(listItem.getLeaguename());
        holder.prizePool.setText(listItem.getPrizepool());
        holder.playerPoints.setText(listItem.getScore());
        holder.playerRank.setText(listItem.getRank());
        holder.playerName.setText(listItem.getUsername());
        holder.spots.setText(listItem.getSpots());
        holder.entryFee.setText(listItem.getFee());
        holder.setItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(View v, int pos) {

            }
        });
    }
}

这是我的 fragment :

public class MyLeagues extends Fragment {
    SharedPreferences sharedPreferences,ui;
    int score,userid,i=0;
    String username,lname,inviteCode;
     List<MyContest> list_item;
     MyLeaguesListAdapter adapter;
    ProgressBar progressBar;
    Sprite fadingCircle;
    RecyclerView recyclerView;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my_leagues,null);
        ui = this.getActivity().getSharedPreferences("User",Context.MODE_PRIVATE);
        userid = ui.getInt("userid",-1);
        progressBar = (ProgressBar) view.findViewById(R.id.mcspin_kit);
        fadingCircle = new FadingCircle();
        progressBar.setIndeterminateDrawable(fadingCircle);
        Log.d("eede", "onCreateView: "+inviteCode);
        recyclerView = (RecyclerView) view.findViewById(R.id.mc_recycler);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
        list_item = new ArrayList<>();
        getMYContests();
        return view;
    }
    public void getMYContests(){
        Call<MyContestResponse> call = RetrofitClient
                .getInstance()
                .getApi()
                .getMycontests(userid);
        call.enqueue(new Callback<MyContestResponse>() {
            @Override
            public void onResponse(Call<MyContestResponse> call, Response<MyContestResponse> response) {
                list_item=response.body().getData();
                adapter = new MyLeaguesListAdapter(list_item,getContext());
                progressBar.setVisibility(View.INVISIBLE);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(Call<MyContestResponse> call, Throwable t) {
                Log.d("bruv", "onFailure: "+t);
            }
        });
    }

}

错误:

07-03 09:36:20.980 30095-30095/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.android.khelo, PID: 30095 android.content.res.Resources$NotFoundException: String resource ID #0xffffffff at android.content.res.Resources.getText(Resources.java:363) at android.widget.TextView.setText(TextView.java:6485) at com.example.android.khelo.MyLeaguesListAdapter.onBindViewHolder(MyLeaguesListAdapter.java:75) at com.example.android.khelo.MyLeaguesListAdapter.onBindViewHolder(MyLeaguesListAdapter.java:20)

根据我所读到的内容,问题出在我绑定(bind) recylerview 的方式上。但我还不清楚问题到底出在哪里。

最佳答案

您的一个或多个 listItem 属性可能会返回一个整数,例如 getScoregetFee。那么我们来看看TextView.setText(int)

的实现
public final void setText(int resid) {
     ...
}

如您所见,它只接受 int 作为资源 ID,如 R.string.something。 所以你在这里可以做的是让你的int变成string当setText像

holder.playerPoints.setText(listItem.getScore().toString());

关于java - 尝试将 recylerview 添加到 fragment 时未找到资源异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56864787/

相关文章:

java - Spring Hibernate 发现了不止一行具有给定外键的行

java - maven 如何知道依赖项使用哪个 repo?

java - @CucumberOptions 在 Cucumber-junit-platform-engine 中

android - E/AndroidRuntime(3306) : java. lang.RuntimeException: 无法启动 Activity ComponentInfo{c

java - 扩展到 fragment 或 Activity

android - 如何正确地使 fragment 旋转

java - 使用 BufferedImage 创建非常大的图像文件,奇怪的问题取决于编译和计算机

android - 如何检测 ListView 项目变为 ActiveView(离开屏幕)的时刻

android - 某些值在 MPAndroidChart 中不可见?

android - 将 fragment 的 subview 从另一个 fragment 导出为 Png