首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RecyclerView绑定数据

使用RecyclerView绑定数据
EN

Stack Overflow用户
提问于 2015-09-12 11:17:20
回答 2查看 1.7K关注 0票数 2

我使用RecyclerView来显示数据。但是,当我试图在onBindViewHolder()方法中绑定数据时,我会得到以下错误.

代码语言:javascript
复制
09-12 16:37:51.217    2166-2166/com.zaptech.databasedemowithrecycler E/AndroidRuntime﹕ FATAL EXCEPTION: main
    android.content.res.Resources$NotFoundException: String resource ID #0x17
            at android.content.res.Resources.getText(Resources.java:230)
            at android.widget.TextView.setText(TextView.java:3769)
            at com.zaptech.databasedemowithrecycler.adapter.MyEmployeeAdapter.onBindViewHolder(MyEmployeeAdapter.java:47)
            at com.zaptech.databasedemowithrecycler.adapter.MyEmployeeAdapter.onBindViewHolder(MyEmployeeAdapter.java:24)
            at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5277)
            at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5310)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4568)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461)
            at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1962)
            at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1371)
            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334)
            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)
            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)
            at android.view.View.layout(View.java:14008)
            at android.view.ViewGroup.layout(ViewGroup.java:4373)
            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021)
            at android.view.View.layout(View.java:14008)
            at android.view.ViewGroup.layout(ViewGroup.java:4373)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
            at android.view.View.layout(View.java:14008)
            at android.view.ViewGroup.layout(ViewGroup.java:4373)
            at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:493)
            at android.view.View.layout(View.java:14008)
            at android.view.ViewGroup.layout(ViewGroup.java:4373)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
            at android.view.View.layout(View.java:14008)
            at android.view.ViewGroup.layout(ViewGroup.java:4373)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
            at android.view.View.layout(View.java:14008)
            at android.view.ViewGroup.layout(ViewGroup.java:4373)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
            at android.view.View.layout(View.java:14008)
            at android.view.ViewGroup.layout(ViewGroup.java:4373)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
            at android.view.Choreographer.doCallbacks(Choreographer.java:562)
            at android.view.Choreographer.doFrame(Choreographer.java:532)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)

我的适配器的代码如下所示,其中还包括ViewHolder类:

代码语言:javascript
复制
public class MyEmployeeAdapter extends RecyclerView.Adapter<MyEmployeeAdapter.EmployeeViewHolder> {
private List<ModelEmployee> empItemList;
private Context mContext;

public MyEmployeeAdapter(Context context, List<ModelEmployee> feedItemList) {
    this.empItemList = feedItemList;
    this.mContext = context;
}

@Override
public EmployeeViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.rowlayout_emp, null);

    EmployeeViewHolder viewHolder = new EmployeeViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(EmployeeViewHolder holder, int position) {
    ModelEmployee feedItem = empItemList.get(position);
    Log.d("NAME : ", feedItem.getName());
    Log.d("AGE : ", String.valueOf(feedItem.getAge()));
    holder.txtName.setText(feedItem.getName());
    holder.txtAge.setText(feedItem.getAge());

}


@Override
public int getItemCount() {
    return (null != empItemList ? empItemList.size() : 0);
}

public class EmployeeViewHolder extends RecyclerView.ViewHolder {

    public TextView txtName;
    public TextView txtAge;

    public EmployeeViewHolder(View view) {
        super(view);

        this.txtName = (TextView) view.findViewById(R.id.name);
        this.txtAge = (TextView) view.findViewById(R.id.age);
    }
}
}

卡在以下几行:

代码语言:javascript
复制
 @Override
public void onBindViewHolder(EmployeeViewHolder holder, int position) {
    ModelEmployee feedItem = empItemList.get(position);
    Log.d("NAME : ", feedItem.getName());
    Log.d("AGE : ", String.valueOf(feedItem.getAge()));
    holder.txtName.setText(feedItem.getName());
    holder.txtAge.setText(feedItem.getAge());

}

求你了,让我说出错误的事情发生在我身上.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-12 11:22:06

变化

代码语言:javascript
复制
holder.txtAge.setText(feedItem.getAge());

代码语言:javascript
复制
holder.txtAge.setText(String.valueOf(feedItem.getAge()));

您正在setText方法中传递整数值,因此它将签入String.xml文件中的字符串。因此,必须将整数值转换为字符串值。

票数 5
EN

Stack Overflow用户

发布于 2015-09-12 12:14:32

问题是,android将feedItem.getAge()解释为资源ID,并试图从string.xml中获取相应的字符串资源。

因此,抛出运行时异常(资源未找到),而不是编译器错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32538174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档