我正在制作锻炼日志,我希望其他用户能够添加新的锻炼类型。
我在资源中创建了字符串数组,并创建了一个微调器,它将从资源中的字符串数组中获取字符串。
我不确定如何从 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/