1

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

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

我不确定如何从 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();
        }

    }

}
4

1 回答 1

1

您不能修改资源本身。如果您愿意,欢迎您将您的转换String[]为一个ArrayList<String>并添加从其他地方(例如,文件、数据库、SharedPreferences)获得的其他字符串。

add()ArrayAdapter如果ArrayAdapter是由 而ArrayList不是 Java 数组 ( ) 制成的,则on 可以工作[],因为 Java 数组的大小在运行时无法更改。

于 2013-05-04T20:13:50.857 回答