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

时间:2015-02-07 17:39:32

标签: android android-activity textview tableview

我想要一些帮助,将来自多个文本文件的数据放入活动中显示的一个表中。

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

我希望这些字符串显示在表格中的一列上,其中每列显示相似格式的其他文本文件数据。

我想要展示这样的东西:

table

我目前使用的代码在textview中显示一个文本文件,我如何操作代码以使我需要的东西成为可能?

 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);
    }
}

1 个答案:

答案 0 :(得分:2)

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

1)为统计表创建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)为统计信息表行创建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);
        }
    }

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