首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 多按鈕跳轉同一 Activity 顯示不同文本的實現方案

     編輯:程式設計疑難解答

需求

點擊「第一章」按鈕跳轉 Activity1 顯示 page1.txt;點擊「第二章」跳轉同一 Activity1 顯示 page2.txt。

方案對比

方案實現方式優點缺點適用場景
Intent Extra 傳文件名 intent.putExtra("file", "page1.txt") 簡單、無持久化 文本極長超過 Binder 限制(~1MB)會崩潰 短文本、動態生成
Intent 傳原始文本 intent.putExtra("text", longString) 無 I/O 同左,且佔用內存 極短文本
本地文件/ assets 讀取 傳文件名,目標 Activity 讀取 assets/page1.txt 或內部存儲 支持超長文本、離線、緩存 需 I/O、權限 長文本、電子書、幫助文檔
數據庫/ContentProvider 傳 ID,查詢內容 結構化、可搜索 複雜度高 內容管理系統

推薦實現(assets 方案)

// MainActivity.java
public void onChapterClick(View view) {
    String fileName = "page" + view.getTag() + ".txt"; // Tag 設置為 1,2,3...
    Intent intent = new Intent(this, ReadActivity.class);
    intent.putExtra("fileName", fileName);
    startActivity(intent);
}

// ReadActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_read);
    TextView tv = findViewById(R.id.textContent);
    String fileName = getIntent().getStringExtra("fileName");
    try (InputStream is = getAssets().open(fileName);
         BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"))) {
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) sb.append(line).append('\n');
        tv.setText(sb.toString());
    } catch (IOException e) {
        tv.setText("章節加載失敗:" + e.getMessage());
    }
}

進階優化

  • 使用 AsyncTask/RxJava/Coroutines 異步讀取大文件,避免 ANR。
  • 添加緩存(LruCache/Room)提升二次打開速度。
  • 支持字體縮放、夜間模式、目錄導航。

核心思想:傳標識,不傳內容,由目標頁按需加載。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved