首页 > 解决方案 > 此自定义数组适配器不适用于整数

问题描述

我已经为练习编写了一个自定义数组适配器,所以.. 当我在 data.java 类中使用字符串作为变量时,下面的代码可以工作,但是如果我使用整数变量,它将被安装在 AVD 中但不会打开......

主要活动.java

在这里输入代码

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ArrayList<data> arr= new ArrayList<>();
    arr.add(new data("2","6","india","4","22222"));
    ListView listView=findViewById(R.id.list);
    adpater a=new adpater(this,arr);
    listView.setAdapter(a);
 }
}

适配器.java

public class adpater  extends ArrayAdapter<data> {
public adpater(Activity context, List<data> arrayList) {
    super(context,0, arrayList);
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    if(convertView==null){
        convertView= LayoutInflater.from(getContext()).inflate(R.layout.list,parent,false);
    }
    data currentitem = getItem(position);
    TextView textView=convertView.findViewById(R.id.location);
    TextView textView1=convertView.findViewById(R.id.recovered);
    TextView textView2=convertView.findViewById(R.id.dead);
    TextView textView3=convertView.findViewById(R.id.confirmed);
    TextView textView4=convertView.findViewById(R.id.updated);
    textView.setText(currentitem.getCountry());
    textView1.setText(currentitem.getRecovered());
    textView2.setText(currentitem.getDead());
    textView3.setText(currentitem.getConfirmed());
    textView4.setText(currentitem.getUpdated());
    return  convertView;
 }
}

数据.java

public class data {
private  String  confirmed;
 private String dead;
private String country;
private String recovered;
private String updated;





public String  getConfirmed() {
    return confirmed;
}

public String getDead() {
    return dead;
}

public String getRecovered() {
    return recovered;
}

public String getCountry() {
    return country;
}

public String getUpdated() {
    return updated;
}
public data(String Confirmed,String Dead,String Country,String Recovered,String Updated){
    confirmed=Confirmed;
    dead=Dead;
    country=Country;
    recovered=Recovered;
    updated=Updated;
 }
}

我的问题是,如果我在这里使用任何整数变量..它将不起作用。我不知道这是不是一个好问题,但这真的把我搞砸了......

标签: javaandroid

解决方案


根本原因

当您使用String变量时,TextView将使用setText(CharSequence)方法并且效果很好。但是当你使用int变量时,TextView会使用setText(int)方法,param是一个特殊的int类型,它指的是R类中编译器在构建时创建的int资源类型,如果你不明白将正常的 int 传递给它。

解决方案

将类型int转换为String类型,因此TextView将使用setText(CharSequence)方法代替。

假设在数据类中,confirmed变量是一种int类型,然后将代码从

textView3.setText(currentitem.getConfirmed());

textView3.setText(currentitem.getConfirmed() + "");

或者

textView3.setText(String.valueOf(currentitem.getConfirmed()));

推荐阅读