Android layout Android::自定义阵列适配器未调用getView且未导致任何异常

Android layout Android::自定义阵列适配器未调用getView且未导致任何异常,android-layout,android-arrayadapter,android-view,Android Layout,Android Arrayadapter,Android View,我想要的只是一个记录列表,每个记录在列表视图中有三个字符串字段。使用应用程序会生成更多记录,此活动将记录显示为日志。数据记录到本地存储上的CSV文件并从中读取。如果你知道一个更好的方法来存储数据,让我也知道 这是我的自定义适配器。在调试过程中,我让构造函数执行,但从未调用getView()的重写,这解释了为什么我只看到了为什么?更多代码如下: public class TransRecordAdapter extends ArrayAdapter<String[]> { pr

我想要的只是一个记录列表,每个记录在列表视图中有三个字符串字段。使用应用程序会生成更多记录,此活动将记录显示为日志。数据记录到本地存储上的CSV文件并从中读取。如果你知道一个更好的方法来存储数据,让我也知道

这是我的自定义适配器。在调试过程中,我让构造函数执行,但从未调用getView()的重写,这解释了为什么我只看到了为什么?更多代码如下:

public class TransRecordAdapter extends ArrayAdapter<String[]> {
    private List<String[]> history;

    public TransRecordAdapter(Context context, int textViewResourceId, List<String[]> history2) {
        super(context, textViewResourceId);
        this.history = history2;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.listitem, null);
        }

        String[] rec = history.get(position);
        if (rec != null) {
            TextView input = (TextView) v.findViewById(R.id.history_input);
            TextView trans = (TextView) v.findViewById(R.id.history_trans);
            TextView num = (TextView) v.findViewById(R.id.history_num);

            if (rec[0] != null) {
                input.setText(rec[0]);
            }
            if (rec[1] != null) {
                trans.setText(rec[1]);
            }               
            if (rec[2] != null) {
                num.setText(rec[2]);
            }
        } 
        return v;
    }
}
公共类TransRecordAdapter扩展了ArrayAdapter{
私人名单历史;
公共TransRecordAdapter(上下文上下文,int textViewResourceId,列表历史2){
super(上下文,textViewResourceId);
历史=历史2;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null){
LayoutInflater vi=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
v=vi.充气(R.layout.listitem,空);
}
String[]rec=history.get(位置);
如果(rec!=null){
TextView输入=(TextView)v.findViewById(R.id.history_输入);
TextView trans=(TextView)v.findViewById(R.id.history_trans);
TextView num=(TextView)v.findViewById(R.id.history_num);
if(rec[0]!=null){
input.setText(rec[0]);
}
if(rec[1]!=null){
trans.setText(rec[1]);
}               
if(rec[2]!=null){
num.setText(rec[2]);
}
} 
返回v;
}
}
以及此活动的onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gematria_droid_history);
    ListView history_list = (ListView) findViewById(R.id.history_list);

    try {
        File historyFile = this.getFileStreamPath("gematriadroid-history");
        if(!historyFile.exists()) {
            historyFile.createNewFile(); 
        }
        FileReader mFileReader = new FileReader(historyFile);
        CSVReader csvReader = new CSVReader(mFileReader);
        List<String[]> history = csvReader.readAll();
        csvReader.close();

        if(history.size() != 0) {
            TransRecordAdapter adapter = new TransRecordAdapter(this, R.layout.listitem, history);
            history_list.setAdapter(adapter);
        }
    } catch (IOException e1) {
        e1.printStackTrace();
    } catch (RuntimeException e2) {
        e2.printStackTrace();
    } catch (Exception e3) {
        e3.printStackTrace();
    }

}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u gematria\u droid\u history);
ListView history_list=(ListView)findViewById(R.id.history_list);
试一试{
File historyFile=this.getFileStreamPath(“gematriadroid历史”);
如果(!historyFile.exists()){
创建新文件();
}
FileReader mFileReader=新的FileReader(历史文件);
CSVReader CSVReader=新CSVReader(mFileReader);
List history=csvReader.readAll();
csvReader.close();
如果(history.size()!=0){
TransRecordAdapter=新的TransRecordAdapter(this,R.layout.listitem,history);
历史记录\u列表。设置适配器(适配器);
}
}捕获(IOE1异常){
e1.printStackTrace();
}捕获(运行时异常e2){
e2.printStackTrace();
}捕获(例外e3){
e3.printStackTrace();
}
}
布局呢

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/background"
tools:context=".GematriaDroidHistory" >
<TextView
    android:id="@+id/history_filter"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:padding="5dp"
    android:hint="@string/history_filter"/>
<ListView
    android:id="@+id/history_list"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginBottom="10dp"
    android:background="#FFFFFF">
</ListView>
</LinearLayout>

和列表项

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_marginTop="5dp"
android:layout_marginLeft="10dp"
android:layout_marginBottom="5dp"
android:layout_marginRight="10dp"
android:background="@drawable/papyrus"
android:padding="5dp">

<TextView
    android:id="@+id/history_input"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="@string/history_input"
    android:textSize="20sp" />

<TextView
    android:id="@+id/history_trans"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:text="@string/history_trans"
    android:textSize="20sp" />

<TextView
    android:id="@+id/history_num"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:textSize="20sp"
    android:text="@string/history_num"/>
</RelativeLayout>

我认为问题在于你没有告诉基类你的数组有多少个元素

它可能会为您提出两种解决方案

解决方案1)修改构造函数,如下所示。这样,我认为您不必定义“history”,在getView中,您只需调用“getItem()”即可在该位置获取项

public TransRecordAdapter(Context context, int textViewResourceId, List<String[]> history2) {
    super(context, textViewResourceId, history2);
    this.history = history2;
}
公共TransRecordAdapter(上下文上下文,int textViewResourceId,列表历史2){ super(上下文,textViewResourceId,history2); 历史=历史2; }
解决方案2)还覆盖getCount()和getItem()。

我认为问题在于您没有告诉基类您的数组有多少个元素

它可能会为您提出两种解决方案

解决方案1)修改构造函数,如下所示。这样,我认为您不必定义“history”,在getView中,您只需调用“getItem()”即可在该位置获取项

public TransRecordAdapter(Context context, int textViewResourceId, List<String[]> history2) {
    super(context, textViewResourceId, history2);
    this.history = history2;
}
公共TransRecordAdapter(上下文上下文,int textViewResourceId,列表历史2){ super(上下文,textViewResourceId,history2); 历史=历史2; } 解决方案2)还覆盖getCount()和getItem()