如何以编程方式添加和保留文本视图?

Posted

技术标签:

【中文标题】如何以编程方式添加和保留文本视图?【英文标题】:How to add and keep a textview programmatically? 【发布时间】:2016-03-23 01:02:35 【问题描述】:

我正在尝试学习如何以编程方式添加 TextView,但我找到了很多关于这个主题的答案。我有以下代码工作:

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    LinearLayout llCommand1 = (LinearLayout) findViewById(R.id.LL_Main);
    llCommand1.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            mtAdd_Register();
        
    );


public void mtAdd_Register()
    View llColumn1 =  findViewById(R.id.Column1);
    TextView tvData1 = (TextView) getLayoutInflater().inflate(R.layout.tv_red, null);
    sData = "user input" //I'll write a method to get user input
    tvData1.setText(sData);
    tvData1.setLayoutParams(new LinearLayoutCompat.LayoutParams(LinearLayoutCompat.LayoutParams.MATCH_PARENT,30));
    ((LinearLayout) llColumn1).addView(tvData1);

“LL_Main”是一个水平LinearLayout,有6个子垂直LinearLayouts(Column1到Column6),“tv_red”用于将重力设置为“center”,背景颜色设置为“red”(带边框,来自可绘制资源)。

此代码以某种方式起作用,因为当我在运行时单击 LL_Main 时,我按预期添加了 TextViews。对于这个测试,TextView 仅在 Column1 中创建,但稍后我将有一个带有 id 的数组和一个循环来为每列创建一个 TextView。

但是我想要的是当我再次运行应用程序时将这些添加的 Textviews 放置到位,我的意思是,起初我的应用程序没有任何数据要显示,我的目标是在用户添加并保留注释触摸屏幕,因此用户每次运行应用程序时都会看到之前添加的 TextViews。

我是否走在正确的道路上?还是应该将用户输入保存到 JSON 文件并在每次运行应用程序时检索它?但是即使我必须将用户输入保存在 JSON 文件中,如何保留 TextViews 以显示保存的数据?

我只是想:当我第一次运行应用程序时,我可以获得输入并添加 5 个 TextView。我保存 JSON 文件,当我再次运行应用程序时,我必须检查文件有多少数据。所以我的代码应该根据需要添加尽可能多的 TextView 来显示检索到的数据。

是吗?......

编辑:

为了更清楚一点:假设我的布局中没有任何内容,而我的 activity_main.xml 只显示一个空屏幕。当用户触摸屏幕时,会添加一个带有文本“用户输入”的 TextView。他触摸屏幕的次数就会发生这种情况。

但是当他关闭应用程序并再次运行它时............所有的 TextViews 都消失了。每次用户运行应用程序时,他都会看到一个空白屏幕。我需要以前的 TextViews 在那里............

【问题讨论】:

【参考方案1】:

如果您需要存储轻量级消息,请尝试 SharePreferences。

【讨论】:

我仍然不确定是否必须在应用程序之外保存一些内容(SharePreferences、JSON 或 SQlite)。看来我必须这样做,我只是还不确定。但是如果我必须保存一些东西,我认为 JSON 将是我的选择,因为我可以在桌面上实现 Excel 工作表来获取用户输入并从那里以 JSON 格式保存数据。这不是最初的想法,从工作表中获取数据,但如果我必须依赖某种外部存储,那么这是可能的。 JSON 没问题。首先创建或找到你的 json 文件。然后像 1.[]2.add a text to line1->["text":" added text"," line":"1"],3.add text to line 5->["text":" added text","line":"1","text":"add another text"," line":"5"].记住文件 IO 是阻塞的,所以每次用户使用它时最好将它们记录为字符串并一起保存到文件中。然后重启Activity,读取文件,将TextView添加到右边的行。

以上是关于如何以编程方式添加和保留文本视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 UIView 的图层属性并为其子视图保留图层?

Qt中如何将信息保存到文本文件并且保留原来的信息,比如在原来的文本文件中添加一行信息。

如何以编程方式添加 touchesBegan 动作?

以编程方式访问 UISwitch 大小而不添加组件

在 swift 中以编程方式在堆栈视图中添加标签和文本视图

以编程方式创建UIView,在旋转设备时保留其大小