2017-01-21 1 views
0

설명하기가 조금 힘들지만 최선을 다하겠습니다.Android - 회 전자 항목이 변경되었을 때보기를 변경하는 방법?

1에서 50까지 숫자가있는 회 전자가 있습니다. 숫자를 탭하면 작성한 스크립트에서 탭 한 숫자 (예 : 탭 3 -> 3 TableViews)와 같은 많은 TableViews를 만듭니다.

다른 번호로 가볍게 칠 때 문제가 발생합니다. 이전보기를 새 번호로 바꾸고 싶습니다. 끝에 추가하는 대신에! 그냥 설명하는 것이 좋습니다. 저는 3 번을 탭하여 3 개의보기를 만듭니다. 그러면 4 번을 탭합니다. 지금은 4 번보기를 원하지만, 3 + 4를하기 때문에 7 번을 제공합니다. 지금 50 번을 탭하면 50 대신 57 개의 뷰가 생기게됩니다.이 작업을 수행하는 방법은 실제로 알지 못합니다.

도움 주셔서 감사합니다.

이것은 전체 코드이지만 내 OnItemSelectedListener에서 수행하는 작업에 관심이 없다고 생각합니다. 어쨌든 필요한 경우를 대비하여 여기에 게시합니다.

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      for (int j = 1+pokeIds.size(); j <= (int)spinner.getSelectedItem()+pokeIds.size(); j++) { 
       //get a reference for the TableLayout 
       TableLayout table = (TableLayout)findViewById(R.id.internalcopies); 

       //create a new TableLayout 
       TableLayout internaltable = new TableLayout(getApplicationContext()); 

       // create a new TableRow 
       TableRow row = new TableRow(getApplicationContext()); 
       TableRow attackRow = new TableRow(getApplicationContext()); 
       TableRow ultiRow = new TableRow(getApplicationContext()); 

       ImageView iv = new ImageView(getApplicationContext()); 
       iv.setImageResource(imageAdapter.mThumbIds[pokeID-1]); 
       TableRow.LayoutParams params = new TableRow.LayoutParams(200,200); 
       iv.setLayoutParams(params); 

       attackSpinner = new Spinner(getApplicationContext()); 
       ultiSpinner = new Spinner(getApplicationContext()); 
       attackSpinner.setBackgroundColor(getResources().getColor(R.color.erba)); 
       ultiSpinner.setBackgroundColor(getResources().getColor(R.color.erba)); 
       params = new TableRow.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
       attackSpinner.setLayoutParams(params); 
       ultiSpinner.setLayoutParams(params); 
       attackSpinner.setId(j); 
       ultiSpinner.setId(j*10); 

       editText = new EditText(getApplicationContext()); 
       if (dpi == 480) { 
        editText.setWidth(250); 
        editText.setTextSize(13); 
       } 
       else if (dpi == 420) 
        editText.setWidth(300); 
       editText.setHint("(Nome)"); 
       editText.setHintTextColor(getResources().getColor(R.color.acciaio)); 
       editText.setTextColor(getResources().getColor(android.R.color.black)); 
       editText.setId(j*11); 

       List<String> attacks = pokemonHelper.getMoves(pokeID, "HasAttack"); 

       ArrayAdapter<String>attacksAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, attacks); 
       attacksAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       attackSpinner.setAdapter(attacksAdapter); 

       List<String> ultis = pokemonHelper.getMoves(pokeID, "HasUlti"); 

       ArrayAdapter<String>ultiAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, ultis); 
       attacksAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       ultiSpinner.setAdapter(ultiAdapter); 

       // add the TextView to the new TableRow 
       params.gravity = Gravity.CENTER_VERTICAL; 
       params.setMargins(0,10,0,0); 
       row.addView(iv); 
       editText.setLayoutParams(params); 
       row.addView(editText); 
       attackRow.addView(attackSpinner); 
       ultiRow.addView(ultiSpinner); 
       internaltable.addView(attackRow); 
       internaltable.addView(ultiRow); 
       internaltable.setLayoutParams(params); 
       row.addView(internaltable); 

       // add the TableRow to the TableLayout 
       table.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT)); 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent){} 
    }); 

답변

1

당신이 새로운 추가를 시작하기 전에 테이블의 모든 자식을 제거해야합니다 :

//get a reference for the TableLayout 
TableLayout table = (TableLayout)findViewById(R.id.internalcopies); 

table.removeAllViews(); 
for (int j = 1+pokeIds.size(); j < (int)spinner.getSelectedItem()+pokeIds.size(); j++) { 
    ... 
} 
+0

같은 약간의 대답은 큰 문제를 해결하기 위해! 고맙습니다!!! –

관련 문제