Android 从多个文本文件中读取并在 table 视图中显示

Android read from multiple text files and show in table view

我需要一些帮助,将多个文本文件中的数据放入一个 table 中,显示在 activity 上。

文本文件的每一行都有一个值。

我希望这些字符串显示在 table 中的一列中,其中每一列显示另一个类似格式的文本文件数据。

我想要显示这样的内容:

我当前使用的代码在文本视图中显示了一个文本文件,我如何操作代码才能实现我的需要?

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stats);

        File sdCard = Environment.getExternalStorageDirectory();

        String path = sdCard.getAbsolutePath() + "/SO/";  
        File file = new File(path + "cheststats.txt");

        StringBuilder text = new StringBuilder();

        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;

            while ((line = br.readLine()) != null) {
                text.append(line);
                text.append('\n');
            }
            br.close();
        }
        catch (IOException e) {
        }
        TextView tv = (TextView)findViewById(R.id.tv);
        tv.setText(text);
    }
}

这不是一个好问题,因为您需要的所有琐碎信息都在 Android Developers 上。但无论如何,我希望以下步骤对您有所帮助:

1) 为统计 table:

创建 stats.xml 布局
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableStats"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Stats"
            android:gravity="center"
            android:id="@+id/textView4" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="Text File 1 Data"
            android:id="@+id/textView1" />

        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="Text File 2 Data"
            android:id="@+id/textView2" />

        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="Text File 3 Data"
            android:id="@+id/textView3" />
    </TableRow>
</TableLayout>

2) 为统计 table 行创建 stats_row.xml 布局:

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_vertical|end" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_vertical|end" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_vertical|end" />
</TableRow>

3) 接下来,创建读取文件的函数:

    private List<String> readFileData(String filePath) {
        List<String> values = new ArrayList<>();

        try {
            BufferedReader fileBufferedReader = new BufferedReader(new FileReader(new File(filePath)));
            String value;
            while ((value = fileBufferedReader.readLine()) != null) {
                values.add(value);
            }
            fileBufferedReader.close();
        } catch (IOException ignore) {
        }

        return values;
    }

4) 创建用于填充统计行视图的函数:

    private void fillView(View view, String dataset1Value, String dataset2Value, String dataset3Value) {
        TextView textView1 = (TextView) view.findViewById(R.id.textView1);
        TextView textView2 = (TextView) view.findViewById(R.id.textView2);
        TextView textView3 = (TextView) view.findViewById(R.id.textView3);

        textView1.setText(dataset1Value);
        textView2.setText(dataset2Value);
        textView3.setText(dataset3Value);
    }

5) 最后你的 onCreate 函数应该是这样的:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stats);

        TableLayout tableStats = (TableLayout) findViewById(R.id.tableStats);

        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/SO/";

        List<String> data1 = readFileData(path + "file1.txt");
        List<String> data2 = readFileData(path + "file2.txt");
        List<String> data3 = readFileData(path + "file3.txt");

        int maxDataSetSize = Math.max(data1.size(), Math.max(data2.size(), data3.size()));

        for (int i = 0; i < maxDataSetSize; i++) {
            String dataset1Value = data1.size() > i ? data1.get(i) : null;
            String dataset2Value = data2.size() > i ? data2.get(i) : null;
            String dataset3Value = data3.size() > i ? data3.get(i) : null;

            View statsRowview = getLayoutInflater().inflate(R.layout.stats_row, null);

            fillView(statsRowview, dataset1Value, dataset2Value, dataset3Value);

            tableStats.addView(statsRowview);
        }
    }

我不确定它是否会在第一次尝试时起作用。我没有测试过。