You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:30:55