Android:如何保存转换为数组值的 EditText 并将它们加载回原位

Posted

技术标签:

【中文标题】Android:如何保存转换为数组值的 EditText 并将它们加载回原位【英文标题】:Android: How to save EditText converted to Array values and load them back in place 【发布时间】:2016-04-28 15:52:25 【问题描述】:

作为一个刚接触 android 编程的人,我终于完成了我希望我的应用程序拥有的大部分功能,除了保存/加载系统。 (虽然我还是要设计界面。)

在我继续之前,这是我保存按钮的代码:

saveList.setOnClickListener(new View.OnClickListener() 
    @Override
       public void onClick(View v) 
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Save List");
            final EditText saveName = new EditText(MainActivity.this);
            saveName.setInputType(InputType.TYPE_CLASS_TEXT);
            builder.setView(saveName);

            builder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() 
                @Override
                public void onClick(DialogInterface dialog, int which) 
                   dialog.cancel();
            
     );
            builder.setNegativeButton("Save", new DialogInterface.OnClickListener()                                                     
            @Override
            public void onClick(DialogInterface dialog, int which) 
            m_Text = saveName.getText().toString();
            
     );
     builder.show();

现在,我想学习(知道)的是如何从我的数组中保存值的方法/代码:

ArrayList<String> values = new ArrayList<>();
int idList[] = new int[]R.id.textBox1, R.id.textBox2, R.id.textBox3,
                         R.id.textBox4, R.id.textBox5, R.id.textBox6;

for (int id : idList) 
    String stringList = ((EditText) findViewById(id)).getText().toString();
    if (!TextUtils.isEmpty(stringList)) 
         values.add(stringList);
    


    myItems = values.toArray(new String[values.size()]); 

并将这些值加载到各自的位置

(例如 myItems[0] 应该放在 textBox1 中,myItems[1] 应该放在 textBox2 中等等......)。

任何帮助将不胜感激。非常感谢。

编辑:我关于这个问题的错误是误导性的。我想知道如何将值保存到文本文件或 android 给定文件中,然后加载以供以后使用。

【问题讨论】:

【参考方案1】:

如果要将所有字符串恢复回 EditTexts,则需要维护内容和 EditText 之间的映射。在上述情况下,您只存储不为空的字符串。所以假设你的第一个 EditText 是空的,你不会将它存储在values 中。但如果你这样做,你的整个订单就会一团糟。您将不知道将哪个字符串放在哪里。最快的解决方法是存储所有 EditTexts 字符串,即使它是空的。所以你的代码会变成

    for (int id : idList) 
        String stringList = ((EditText) findViewById(id)).getText().toString();
        // Store everything in values
        values.add(stringList);
    
    myItems = values.toArray(new String[values.size()]);

然后要加载所有内容,您可以执行类似的操作

   for (int i = 0; i < idList.length; i++) 
        ((EditText) findViewById(idList[i])).setText(myItems[i]);
    

【讨论】:

您好!我应该提到的是,如果有空的 EditTexts,除非填充了一个值,否则应用程序将不会继续下一步。哇,我刚刚注意到我的问题中的错误,我打算保存它以供以后使用,例如保存列表然后退出然后再次访问它。 这完全改变了要求!在这种情况下,您应该查看SharedPreferences。我不会为此编写代码,因为这将是很多代码并且它是直截了当的。看看docs。 感谢您的链接!这就是我需要知道的。我会接受你的回答,因为你在这里给了我一个。

以上是关于Android:如何保存转换为数组值的 EditText 并将它们加载回原位的主要内容,如果未能解决你的问题,请参考以下文章

C#,winfom,数据库为access.如何把sql查询结果直接保存在数组中?不是通过循环一个值一个值的赋予。

如何使用android中的共享首选项将数据保存在editText中[重复]

如何在 $project 阶段将一个值的数组转换为对象?

如何将 16 位值的数组转换为 base64?

android怎么把json转换为hashmap

如何在 Go 中将 JSON 对象数组转换为具有默认值的结构数组?