使用数组数组作为指向Java中可扩展的类列表的指针
阅读在Java中通过引用传递字符串中的第一个答案? 我(如在旧的指针吓坏了C书呆子)有一个关于在java中使用数组作为指针的问题。
在一个设置例程中,有多个可编辑的EditText框用于存储多个字符串。 这包括添加一个EditText框按钮。 所以在屏幕上,按钮之后是一些EditText框。 我有一个类似的URL来存储。
而不是像20行代码一样重复一遍又一遍地处理不同的这样的设置数据项,对于方法(C中的函数)来说显然是一种情况,问题是如何保存有关EditText框的信息当用户按下保存按钮时创建。 在C中,您只需发送一个编辑框数组的指针,并在创建新编辑框时重新分配编辑框数组。 在Java中,我无法重新分配editboxes数组来扩展它,但可以创建并克隆它。 但是这跟editboxes数组不一样。 但是,然后我在调用方法中有旧的编辑框数组,而不是新的。 但是很明显,使用字符串可以创建一个单位的字符串数组并发送给方法并更新它。 这显然也可以用于编辑框数组,使编辑框数组中的一个编辑框数组可以被调用方法更新并展开。
String[][] stringList = new String[1][];
stringList[0] = new String[2];
stringList[0][0] = new String("Sonny");
stringList[0][1] = new String("Ronny");
ExpandArray(context, stringList);
public static void ExpandArray(Context context, String[][] stringPtr) {
stringPtr[0][1]="Zeke";
String[] strings = new String[3];
System.arraycopy(stringPtr[0], 0, strings, 0, stringPtr[0].length);
stringPtr[0] = strings;
stringPtr[0][2]="Sue";
}
和
EditText[][] EditTextList = new EditText[1][];
EditTextList[0] = new EditText[2];
EditTextList[0][0] = new EditText(context);
EditTextList[0][1] = new EditText(context);
ExpandArray(context, EditTextList);
public static void ExpandArray(Context context, EditText[][] EditTextPtr) {
EditText[] EditTexts = new EditText[3];
System.arraycopy(EditTextPtr[0], 0, EditTexts, 0, EditTextPtr[0].length);
EditTextPtr[0] = EditTexts;
EditTextPtr[0][2]== new EditText(context);
}
问题1阅读在Java中通过引用传递字符串中的第一个答案? 所有评论都受到两个第一个StringBuilder解决方案的强烈支持,但没有解释为什么。 这就是我们在这里讨论类数组的String,可能会有所不同。 *我觉得我只是用Java语法制作了C语言解决方案,可能会有更好的Java文化解决方案? 你知道C nerds对于指向指针等的指针是疯狂的,而且这种感觉很奇怪。 *
有没有比数组更好的类数组解决方案(解决方案3)?
我正在学习Java文化和我的一个按钮和n个EditText框的实际方法(工作正常),但感觉像车库文化:
public static LinearLayout TextListbox(Context context, EditText[][] EditTextboxes, String Title, String DataStringsDimension) {
final Context contextTextListbox = context;
final EditText[][] EditboxTextListbox=EditTextboxes;
final String ItemText = Title;
final LinearLayout layoutEditTextListbox = new LinearLayout(contextTextListbox);
layoutEditTextListbox.setOrientation(LinearLayout.VERTICAL);
layoutEditTextListbox.setX(layoutEditTextListbox.getX() + 15);
layoutEditTextListbox.setBackgroundColor(Color.rgb(0xFF, 0xE8, 0xAA));
if (DataStringsDimension != null)
EditboxTextListbox[0] = new EditText[getJniListDataSize(DataStringsDimension)];
else
EditboxTextListbox[0] = new EditText[0];
final Button button = new Button(contextTextListbox);
button.setText("+ " + ItemText);
button.setTag(EditboxTextListbox[0].length);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Enlarge to Edit box array
EditText[] EditboxArrayTemp = new EditText[EditboxTextListbox[0].length + 1];
System.arraycopy(EditboxTextListbox[0], 0, EditboxArrayTemp, 0, EditboxTextListbox[0].length);
EditboxTextListbox[0] = EditboxArrayTemp;
// Register a new edit box
EditboxTextListbox[0][EditboxTextListbox[0].length - 1] = new EditText(contextTextListbox);
EditboxTextListbox[0][EditboxTextListbox[0].length - 1].setHint(ItemText);
EditboxTextListbox[0][EditboxTextListbox[0].length - 1].setInputType(InputType.TYPE_CLASS_TEXT);
layoutEditTextListbox.addView(EditboxTextListbox[0][EditboxTextListbox[0].length - 1]);
}
});
layoutEditTextListbox.addView(button);
if (EditboxTextListbox[0].length > 0) {
String[] DataStrings = getJniTextUnceListData(DataStringsDimension);
for (int iSlotTitle = 0; iSlotTitle < EditboxTextListbox[0].length; iSlotTitle++) {
EditboxTextListbox[0][iSlotTitle] = new EditText(contextTextListbox);
EditboxTextListbox[0][iSlotTitle].setText(DataStrings[iSlotTitle]);
EditboxTextListbox[0][iSlotTitle].setTag(DataStrings[iSlotTitle]);
EditboxTextListbox[0][iSlotTitle].setHint(ItemText);
EditboxTextListbox[0][iSlotTitle].setInputType(InputType.TYPE_CLASS_TEXT);
layoutEditTextListbox.addView(EditboxTextListbox[0][iSlotTitle]);
}
}
return layoutEditTextListbox;
}
问题2 Java文化当然会得到改善吗? 任何聪明的想法?
我把它作为我的SetupDlg类中的一个方法,是否有任何理由让它成为它自己的类?
对于如何编辑n个要编辑的文本字符串可能会有一些更好的想法。
你可以使用ArrayList而不是Array。 数组具有固定大小,但ArrayList可以轻松增长。 等同于:
String[][] stringList = new String[1][];
stringList[0] = new String[2];
stringList[0][0] = new String("Sonny");
stringList[0][1] = new String("Ronny");
ExpandArray(context, stringList);
public static void ExpandArray(Context context, String[][] stringPtr) {
stringPtr[0][1]="Zeke";
String[] strings = new String[3];
System.arraycopy(stringPtr[0], 0, strings, 0, stringPtr[0].length);
stringPtr[0] = strings;
stringPtr[0][2]="Sue";
}
将会:
List<List<String>> stringList = new ArrayList<List<String>>();
stringList.add(new ArrayList<String>());
stringList.get(0).add(new String("Sonny"));
stringList.get(0).add(new String("Ronny"));
ExpandArray(context, stringList);
//Instead of expand array
stringList.get(0).add(new String("Sue"));
对于editText只需使用:
List<List<EditText>> editText = new ArrayList<List<EditText>>()
ArrayList的大小根据需要增加。
关于通过引用传递,在java中,所有东西都是按值传递的。 只有类对象通过引用传递。 所以只有当你传递一个类对象并对其进行修改时,这个改变才会反映在该函数之外。
对于字符串,您可以使用字符串构建器或字符串对象,但是如果它的唯一一个字符串也适用:
void main(){
string txt = "foo";
txt = addString(txt);
System.out.println(txt);
}
String addString(String txt)
{
txt += " bar";
}
输出将是: foo bar
希望这可以帮助!!
链接地址: http://www.djcxy.com/p/20897.html上一篇: Using arrays of arrays as pointers to expandable lists of classes in Java