Java 我想使用txt文件中的文字设置按钮的文本

Java 我想使用txt文件中的文字设置按钮的文本,java,android,Java,Android,我和我的朋友正在Android Studio中编写一个简单的应用程序。当您按下按钮时,将打开一个新活动,其中包含您按下的按钮的名称,并显示该文件中的文本 我有生成第一组按钮的代码(这些是硬编码的),我可以得到按下的按钮的名称。我的问题是读取文本文件并显示内容。文本文件中的每一行都是一个单词,需要作为按钮的文本值。我不能硬编码这些单词,因为它们经常变化 榜样; 在主活动中,您按下标记为“Round”的按钮,它会将您发送到一个页面,该页面将名为“Round”的文本文件中的所有单词列为按钮 我希望这更

我和我的朋友正在Android Studio中编写一个简单的应用程序。当您按下按钮时,将打开一个新活动,其中包含您按下的按钮的名称,并显示该文件中的文本

我有生成第一组按钮的代码(这些是硬编码的),我可以得到按下的按钮的名称。我的问题是读取文本文件并显示内容。文本文件中的每一行都是一个单词,需要作为按钮的文本值。我不能硬编码这些单词,因为它们经常变化

榜样; 在主活动中,您按下标记为“Round”的按钮,它会将您发送到一个页面,该页面将名为“Round”的文本文件中的所有单词列为按钮

我希望这更清楚


提前感谢。

您应该采取以下步骤:

  • 当用户单击一个按钮时,创建一个指向第二个活动的
    Intent
    ,并将该按钮的名称作为其附加项附加到该按钮上

    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    intent.putExtra("nameOfButton", /* name of button */);
    startActivity(inetnt);
    
  • 在第二个活动中,通过
    getIntent()
    方法获取对该
    Intent
    的引用,并读取其额外的按钮名称

    Intent intent = getIntent();
    String nameOfButton = intent.getStringExtra("nameOfButton");
    
  • 读取相应的文本文件并相应地放大布局文件


假设您的文件位于SD卡中,并且您将其命名为与按钮相同的名称,则此操作应该有效

此外,在您的第一个活动中,您可以创建一个公共变量(或者使用Frogato提到的附加变量。它们听起来比我的主意更好),用于存储单击的按钮的名称,然后添加它+“.txt”

Ps:我花时间做这个只是因为我的好奇心c:

public class test extends Activity {
    LinearLayout layout;
    Button btnarr [] = new Button[50];
    int counter = 0,check=0;
    protected void onCreate(Bundle savedInstanceState) {
        counter=0;

        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);

                layout = new LinearLayout(this);
                layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
                layout.setOrientation(LinearLayout.VERTICAL);

        File sdcard = Environment.getExternalStorageDirectory();

        //Get the text file
        File file = new File(sdcard,"yourbuttonname.txt");

        //Read text from file
        StringBuilder text = new StringBuilder();

        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;

            while ((line = br.readLine()) != null) {
                text.append(line);
                btnarr[counter] = new Button(this);
                btnarr[counter].setText(text.toString());
                text = new StringBuilder();
                counter++;
                check++;
            }
            br.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        doit();
    }
    public void doit()
    {
        counter = 0;
        while(counter < check)
        {
            LinearLayout row = new LinearLayout(this);
            row.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            btnarr[counter].setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            row.addView(btnarr[counter]);
            layout.addView(row);
            counter++;
        }
        setContentView(layout);
    }
}
公共类测试扩展活动{
线性布局;
按钮btnarr[]=新按钮[50];
整数计数器=0,校验=0;
创建时受保护的void(Bundle savedInstanceState){
计数器=0;
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
布局=新的线性布局(本);
layout.setLayoutParams(新的ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_父级,ViewGroup.LayoutParams.MATCH_父级));
布局。设置方向(线性布局。垂直);
文件sdcard=Environment.getExternalStorageDirectory();
//获取文本文件
File File=新文件(SD卡,“yourbuttonname.txt”);
//从文件中读取文本
StringBuilder text=新的StringBuilder();
试一试{
BufferedReader br=新的BufferedReader(新文件读取器(文件));
弦线;
而((line=br.readLine())!=null){
text.append(行);
btnarr[计数器]=新按钮(此按钮);
btnarr[counter].setText(text.toString());
text=新的StringBuilder();
计数器++;
check++;
}
br.close();
}
捕获(IOE异常){
e、 printStackTrace();
}
doit();
}
公共无效doit()
{
计数器=0;
while(计数器<检查)
{
LinearLayout行=新的LinearLayout(该行);
row.setLayoutParams(新的ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_父级,ViewGroup.LayoutParams.WRAP_内容));
btnarr[计数器].setLayoutParams(新的ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_内容,ViewGroup.LayoutParams.WRAP_内容));
row.addView(btnarr[计数器]);
布局。添加视图(行);
计数器++;
}
setContentView(布局);
}
}
test.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

</LinearLayout>


按钮的数量是否可以更改?如果答案是否定的,只是名称可以更改,也许你可以这样做:不添加文本,只需创建一个包含所有按钮的数组,每次循环时,将按钮的文本设置为从缓冲读取器获取的文本,如果名称的数量更改,则按钮数量会更改。所以如果我现在有8个名字,那么我将有8个按钮,但是明天,我可能有12个名字,所以我将有12个按钮。这听起来不错。今天晚些时候我会试试的。谢谢,谢谢。还有一个问题,如何从资产文件夹而不是外部存储设备读取文件。@vbneil54您应该阅读以下答案: