2015-09-28 76 views
-3

我創建了一個多維數組,用於製作任務的所有分配的id及其子任務的列表。如何在Android中的二維數組中添加值

//VARIABLES 
    int rowIndex = 2; 
    int colIndex = 1; 
    int rowIndex2 = 2; 
    int colIndex2 = 0; 
    int i = 0; 
    int j = 0; 
private String[][] ListAllIds; 

,然後,當用戶點擊了 「添加新的任務」 按鈕,

public void addTask(View view) { 

     i++; 
     Map<String, Integer> idsMap = new HashMap<String, Integer>(); 
     String tname = "task" + Integer.toString(i); 
     EditText editText = new EditText(this); 
     GridLayout.LayoutParams param = new GridLayout.LayoutParams(); 
     param.height = ViewGroup.LayoutParams.WRAP_CONTENT; 
     param.width = GridLayout.LayoutParams.MATCH_PARENT; 
     param.rowSpec = GridLayout.spec(rowIndex); 
     param.columnSpec = GridLayout.spec(colIndex); 
     editText.setTextColor(Color.BLACK); 
     editText.setBackgroundResource(android.R.drawable.edit_text); 
     editText.setText(tname); 
     editText.setLayoutParams(param); 

     TextView textView = new TextView(this); 
     GridLayout.LayoutParams param2 = new GridLayout.LayoutParams(); 
     param2.rowSpec = GridLayout.spec(rowIndex2); 
     param2.columnSpec = GridLayout.spec(colIndex2); 
     textView.setPadding(30, 0, 0, 0); 
     textView.setTextColor(Color.BLACK); 
     textView.setTypeface(Typeface.DEFAULT_BOLD); 

     textView.setLayoutParams(param2); 

     if (rowIndex > 1) { 
      textView.setText("TASK "+Integer.toString(i)+": "); 
      editText.setId(i); 
      idsMap.put(tname, i); 
     } 

     ListAllIds[i][j] = tname; 
     gridLayout.addView(editText); 
     gridLayout.addView(textView); 
     rowIndex++; 
     rowIndex2++; 
     this.j = 0; 
    } 

它將錯誤在這條線 - > ListAllIds [i] [j] = TNAME; 我不知道爲什麼。 這是在數組中添加值的不正確方法嗎?

當用戶點擊「添加新的子任務」按鈕的功能,

public void addSubtask(View view) { 
     j++; 
     Map<String, Integer> idsMap = new HashMap<String, Integer>(); 
     String taskno = "task" + Integer.toString(i) + "subtask" + Integer.toString(j); 
     EditText editText = new EditText(this); 
     GridLayout.LayoutParams param = new GridLayout.LayoutParams(); 
     param.height = ViewGroup.LayoutParams.WRAP_CONTENT; 
     param.width = GridLayout.LayoutParams.MATCH_PARENT; 
     param.rowSpec = GridLayout.spec(rowIndex); 
     param.columnSpec = GridLayout.spec(colIndex); 
     editText.setTextColor(Color.BLACK); 
     editText.setBackgroundResource(android.R.drawable.edit_text); 
     editText.setText(taskno); 
     editText.setLayoutParams(param); 

     TextView textView = new TextView(this); 
     GridLayout.LayoutParams param2 = new GridLayout.LayoutParams(); 
     param2.rowSpec = GridLayout.spec(rowIndex2); 
     param2.columnSpec = GridLayout.spec(colIndex2); 
     textView.setPadding(30,0,0,0); 
     textView.setTextColor(Color.BLACK); 

     textView.setLayoutParams(param2); 

     if (rowIndex > 1) { 
      textView.setText("Subtask "+Integer.toString(j)+": "); 
      editText.setId(j); 
      idsMap.put(taskno, j); 
     } 

     //allEdittext.add(i-1,editText); 

     ListAllIds[i][j] = taskno; 

     gridLayout.addView(editText); 
     gridLayout.addView(textView); 
     rowIndex++; 
     rowIndex2++; 
    } 

我只喜歡讓他們的子任務的任務ID的二維數組。

例如:

ListAllIds [1] [0] = 「任務1」;

ListAllIds [1] [1] =「task1subtask1」;

ListAllIds [1] [2] =「task1subtask2」;

ListAllIds [2] [0] =「task2」;

ListAllIds [2] [1] =「task2subtask1」;

ListAllIds [3] [0] =「task3」;


TASK 1: ________

子程序1:_____

子程序2:_____

TASK 2: ________

子程序1:_____

TASK 3: ________

我不知道如何在android中的二維數組中添加值的正確語法。

+0

嘗試使用ArrayList –

+0

Arraylist只有一個維度。我需要二維數組。 @RaviGadipudi – Ruby

+0

ArrayList arrayList = new ArrayList <>();使用這個,把你的字符串數組作爲列表對象 –

回答

0

我對android也很陌生和java,但從我所瞭解的:

經典數組(例如String [])用固定數目的對象進行初始化。這意味着您可以修改數組中的對象,但不能向其中添加新對象。

如果您不知道要在數組中存儲多少個元素,請使用ArrayList而不是經典數組。這樣你就可以添加新的元素。

這裏和例子我創建一個列表,包含字符串的一些列表:

ArrayList<List<String>> myArray = new ArrayList<>(); 
myArray.add(Arrays.asList("task1", "subTask1", "subTask2")); 
myArray.add(Arrays.asList("task2", "subTask1")); 

// get the task1 value 
String task1 = myArray.get(0).get(0); 

// get the subTask1 of task2 
String subTask1ofTask2 = myArray.get(1).get(1); 

的另一種方式來添加元素此ArrayList:

myArray.add(new ArrayList<String>()); 
int lastElementIndex = myArray.size()-1; 
List<String> lastElement = myArray.get(lastElementIndex); 
lastElement.add("task3"); 
lastElement.add("subTask1"); 
lastElement.add("subTask2"); 

// get the task3 value 
String task3 = myArray.get(2).get(0); 
+0

我有兩個不同的功能 - 添加新的任務和添加新的子任務 - 當我點擊「添加新的子任務」時,我無法將其連接到任務數組。它將繼續單獨陣列。 – Ruby

+0

我不能使用該代碼,因爲我有兩個不同的功能 - 「添加新任務」和「添加新的子任務」。如果我在這兩個函數上使用該代碼,最終會像添加單獨的數組列表一樣。像這樣 - > myList.add(Arrays.asList(「task1」));如果我點擊「添加新任務」按鈕。 – Ruby

+0

和myList.add(Arrays.asList(「task1subtask1」));如果我點擊「添加新的SUBTASK」按鈕。 – Ruby

0

試試這個代碼

ArrayList<String[]> strings = new ArrayList<>(); 
    String[] test1 = new String[]{"a","b","c"}; 
    String[] test2 = new String[]{"d","e","f"}; 
    String[] test3 = new String[]{"g","h","i"}; 
    String[] test4 = new String[]{"j","k","l"}; 

    strings.add(test1); 
    strings.add(test2); 
    strings.add(test3); 
    strings.add(test4); 

    // to edit and save back 
    String[] temp = strings.get(0); 
    temp[1] = "z"; 
    strings.set(0, temp); 

讓我知道如果您有任何疑問

+0

有沒有什麼辦法可以通過添加哪個索引來增加值。像這樣ListAllIds [1] [0] =「task1」; ListAllIds [1] [1] =「task1subtask1」; – Ruby

0

你當你聲明類似下面

private String[][] ListAllIds=new String[row_count][column_count]; 

請參閱本link數組初始化String[][]

+0

已經做到了。我把它放在onCreate函數 – Ruby

+0

ListAllIds = new String [] [] {}; – Ruby

+0

試試這個ListAllIds = new String [50] [50]; – uday

0

可以使用ArrayOfArrays

ArrayList<ArrayList<String>> myList = new ArrayList<ArrayList<String>>(); 

然後填寫爲:

myList.add(Arrays.asList("task1","Task1subtask1","Task1subtask2")); 
myList.add(Arrays.asList("task2","Task2subtask1","Task2subtask2")); 
+0

我不能使用該代碼,因爲我有兩個不同的功能 - 「添加新任務」和「添加新子任務」。如果我在這兩個函數上使用該代碼,最終會像添加單獨的數組列表一樣。像這樣 - > myList.add(Arrays.asList(「task1」));如果我點擊「添加新任務」按鈕。 – Ruby

+0

除了不,因爲'數組。asList'返回不支持添加新值的列表 – njzk2

+0

和myList.add(Arrays.asList(「task1subtask1」));如果我點擊「添加新的SUBTASK」按鈕。 – Ruby

相關問題