android - 动态添加新字符串到资源字符串数组

标签 android string android-arrayadapter arrays

我正在制作锻炼日志,我希望其他用户能够添加新的锻炼类型。

我在资源中创建了字符串数组,并创建了一个微调器,它将从资源中的字符串数组中获取字符串。

我不确定如何从 Java 代码向资源字符串数组添加新字符串。 我试过这段代码,但出现异常。

感谢您的帮助:)

public void onClick(View v) {

    switch(v.getId()){

    case R.id.setNewExercise:
        String[] exerciseStringArray = getResources().getStringArray(R.array.exerciseTypes);
        ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(this, R.array.exerciseTypes, android.R.layout.simple_list_item_1);

        String exerciseCheck = addNewExercise.getText().toString();
        try{
        for (int i = 0; i < exerciseStringArray.length; i++)
        {
            if (exerciseCheck.equals(exerciseStringArray[i]))
            {
                Toast.makeText(getApplicationContext(), "This exercise already exist", Toast.LENGTH_LONG).show();
                break;
            }
            else if (i == exerciseStringArray.length - 1 && exerciseCheck.equals(exerciseStringArray[i]) == false)
            {
                list.add(exerciseCheck);
                Toast.makeText(getApplicationContext(), "Added Successfully", Toast.LENGTH_LONG).show();
                break;
            }
        }
        }catch(Exception e){

            Toast.makeText(getApplicationContext(), "wtf", Toast.LENGTH_LONG).show();
        }

    }

}

我现在尝试了这段代码,我的微调器加载为空,并且在尝试保存新字符串时强制关闭。

    /////////////////////Exercise spinner/////////////////////
    // Create an ArrayAdapter using the string array and a default spinner layout
    list = new ArrayList<CharSequence>();
    exerciseAdapter = new ArrayAdapter<CharSequence>(this, R.array.exerciseTypes, list);

    // Specify the layout to use when the list of choices appears
    exerciseAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // Apply the adapter to the spinner
    workOutChoose.setAdapter(exerciseAdapter);


}

@Override
public void onClick(View v) {

    switch(v.getId()){

    case R.id.setNewExercise:


        String exerciseCheck = addNewExercise.getText().toString();

        try{

            if (exerciseAdapter.getPosition(exerciseCheck) >= 0)
            {
                Toast.makeText(getApplicationContext(), "This exercise already exist", Toast.LENGTH_LONG).show();
                break;
            }
            else 
            {
                exerciseAdapter.add(exerciseCheck);
                exerciseAdapter.notifyDataSetChanged();

                Toast.makeText(getApplicationContext(), "Added Successfully", Toast.LENGTH_LONG).show();
                break;
            }
        }
        catch(Exception e){

            Toast.makeText(getApplicationContext(), "wtf", Toast.LENGTH_LONG).show();
        }

    }

}

最佳答案

您不能修改资源本身。欢迎您转换您的 String[]进入 ArrayList<String>并根据需要添加从其他地方(例如文件、数据库、SharedPreferences)获得的其他字符串。

add()ArrayAdapter 上如果 ArrayAdapter 有效由 ArrayList 制成,而不是 Java 数组 ( [] ),因为 Java 数组的大小无法在运行时更改。

关于android - 动态添加新字符串到资源字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16378391/

相关文章:

java - 将 block 插入到 xml 文件 java

C# 字符串格式

android - fragment 中的静态数组适配器。好的还是坏的做法?

android - 使用 setRetainInstance 在 configurationChanges 中保留 ListAdapter 中的列表项

java - 更改 GridView 第一个列的大小

java - 有没有办法明确告诉 Android 系统将我的 Intent 解析为当前 Intent 操作的默认应用程序/Activity ?

android - 如何在启动时自动运行 Android Chrome 主屏幕应用程序

python - 为什么这个 Python 转换对于 map 和没有 map 的行为不同

android - 从android中的电话簿获取联系人号码

java - 如何在android中检查txt文件中的一行是否以 "h"开头?