【问题标题】:while trying to use recyclerview, I can't get content in object in view holder在尝试使用 recyclerview 时,我无法在视图持有者的对象中获取内容
【发布时间】:2020-03-11 16:21:38
【问题描述】:

我正在尝试使用 recyclerview,并且我正在尝试在项目参数中的 viewholder 使用编号中设计“setText”方法。

问题是当我将“item.getNumber()”放入 setText 方法时,应用程序不起作用。我不知道为什么当我只在方法中放入字符串时没有问题并且放入“item.getNumber()”时有问题而没有错误消息。

适配器:

public class adapter extends RecyclerView.Adapter<adapter.ViewHolder> {
    ArrayList<data> items=new ArrayList<data>();

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater=LayoutInflater.from(parent.getContext());
        View itemView= inflater.inflate(R.layout.itemlayout, parent,false);
        return new ViewHolder(itemView);
    } 

    public void additem(data item){
        items.add(item);
    }

    @Override
    public void onBindViewHolder(@NonNull adapter.ViewHolder holder, int position) {
        data item=items.get(position);
        holder.setText(item);
    }

    @Override
    public int getItemCount() {
        return items.size();
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        EditText editText;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
            editText = itemView.findViewById(R.id.editText);
        }

        public void setText(data item) {
            textView.setText(item.getNumber());
            editText.setHint(item.getSentences());
        }
    }
}

主活动:

public class MainActivity extends AppCompatActivity {
    static int num = 6;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView recyclerView = findViewById(R.id.recyclerview);
        adapter adapter1 = new adapter();
        for (int i = 0; i < num; i++) {
            adapter1.additem(new data("sentences", i + 1));
        }
        recyclerView.setAdapter(adapter1);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(layoutManager);
    }
}

data.java:

public class data {
    String sentences = null;
    int number;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public data(String sentences, int number) {
        this.sentences = sentences;
        this.number = number;
    }

    public String getSentences() {
        return sentences;
    }

    public void setSentences(String sentences) {
        this.sentences = sentences;
    }
}

【问题讨论】:

    标签: java android-studio android-recyclerview android-viewholder


    【解决方案1】:

    问题是你的getNumber() 方法返回int

    public int getNumber() {
        return number;
    }
    

    TextView.setText() 有两种不同的版本,一种接受String,另一种接受int。接受int 的版本需要一个字符串资源ID(如R.string.foo),它无法判断您只是想显示一个数字。

    更改您的 setText() 调用,使其看起来像这样:

        textView.setText("" + item.getNumber());
    

    通过使用"" + item.getNumber(),您将确保您调用的setText() 版本接受String,这意味着您可以显示您期望的号码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2015-04-02
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      相关资源
      最近更新 更多