Android开发:ListView点击跳转至第二个Activity并读取Assets文件
嗨,我来帮你搞定这个需求!下面是完整的代码实现方案,一步步帮你完成点击ListView项打开新Activity并显示Assets中文本文件内容的功能:
完整实现方案:点击ListView项打开Activity显示Assets文本内容
第一步:补全第一个Activity的ListView点击事件
先把你提供的代码补全,添加ListView的项点击监听逻辑,点击时把对应文本文件名传递给第二个Activity:
package com.example.dell.cap; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends AppCompatActivity { // 这里假设ListView的每个选项对应Assets里的一个文本文件名,你可以根据实际情况修改 private String[] textFileNames = {"note1.txt", "note2.txt", "note3.txt"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 确保你的布局里有id为list_view的ListView组件 ListView listView = findViewById(R.id.list_view); // 给ListView设置适配器 ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, textFileNames); listView.setAdapter(adapter); // 设置ListView项点击监听 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 获取当前点击项对应的文件名 String targetFile = textFileNames[position]; // 创建跳转Intent Intent intent = new Intent(MainActivity.this, TextDisplayActivity.class); // 把文件名传递到下一个Activity intent.putExtra("TARGET_FILE", targetFile); startActivity(intent); } }); } }
第二步:创建第二个Activity(TextDisplayActivity)
1. 先创建对应的布局文件activity_text_display.xml
在res/layout目录下新建这个布局,用一个TextView来承载文本内容:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp"> <TextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:lineSpacingExtra="4sp"/> </LinearLayout>
2. 编写TextDisplayActivity的Java逻辑
实现读取Assets文件内容并显示的核心功能:
package com.example.dell.cap; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class TextDisplayActivity extends AppCompatActivity { private TextView tvContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_text_display); tvContent = findViewById(R.id.tv_content); // 获取从MainActivity传递过来的文件名 Intent intent = getIntent(); if (intent != null && intent.hasExtra("TARGET_FILE")) { String fileName = intent.getStringExtra("TARGET_FILE"); // 读取Assets里的文件内容 String fileContent = readTextFromAssets(fileName); // 把内容显示到TextView tvContent.setText(fileContent); } } // 读取Assets中文本文件的工具方法 private String readTextFromAssets(String fileName) { StringBuilder contentBuilder = new StringBuilder(); try { // 打开Assets中的文件输入流 InputStream inputStream = getAssets().open(fileName); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; // 逐行读取内容 while ((line = reader.readLine()) != null) { contentBuilder.append(line).append("\n"); } // 关闭流 reader.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); return "文件读取失败:" + e.getMessage(); } return contentBuilder.toString(); } }
第三步:在AndroidManifest.xml中注册第二个Activity
一定要在清单文件里注册新的Activity,否则跳转时会报错:
<application ...> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 添加这行注册TextDisplayActivity --> <activity android:name=".TextDisplayActivity"/> </application>
几个注意点
- 确保你的Assets文件夹下确实存在对应的文本文件,文件名要和
textFileNames数组里的完全一致(包括大小写)。 - 如果文本文件过大,建议用异步任务(比如AsyncTask)来读取,避免阻塞主线程导致界面卡顿。
- 读取文件时的异常处理一定要加上,防止因为文件不存在或读取错误导致程序崩溃。
内容的提问来源于stack exchange,提问作者Tapan Mehta
相关产品推荐
相关产品推荐

