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);
}
}
我不确定它是否会在第一次尝试时起作用。我没有测试过。
我需要一些帮助,将多个文本文件中的数据放入一个 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);
}
}
我不确定它是否会在第一次尝试时起作用。我没有测试过。