在尝试使用 recyclerview 时,我无法在视图持有者中获取对象中的内容
while trying to use recyclerview, I can't get content in object in view holder
我正在尝试使用 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;
}
}
问题是你的getNumber()
方法returnsint
:
public int getNumber() {
return number;
}
TextView.setText()
有两种不同的版本,一种接受 String
,另一种接受 int
。接受 int
的版本需要一个字符串资源 ID(如 R.string.foo
),它无法判断您只是想显示一个数字。
更改您的 setText()
调用,使其看起来像这样:
textView.setText("" + item.getNumber());
通过使用 "" + item.getNumber()
,您将确保调用接受 String
的 setText()
版本,这意味着您可以显示你期待的数字。
我正在尝试使用 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;
}
}
问题是你的getNumber()
方法returnsint
:
public int getNumber() { return number; }
TextView.setText()
有两种不同的版本,一种接受 String
,另一种接受 int
。接受 int
的版本需要一个字符串资源 ID(如 R.string.foo
),它无法判断您只是想显示一个数字。
更改您的 setText()
调用,使其看起来像这样:
textView.setText("" + item.getNumber());
通过使用 "" + item.getNumber()
,您将确保调用接受 String
的 setText()
版本,这意味着您可以显示你期待的数字。