2
  1. 내 응용 프로그램에서 동적 스피너가 있습니다.Android 액티비티에 여러 동적 스피너 뷰 추가, 선택한 스피너 데이터를로드하지 않음 두 번째 스피너

  2. 모두 2 개의 스피너가 하나의 방법에 있으며, 둘 다 종속적입니다 (SPinner1, Spinner2).

  3. 나는이 메서드를 여러 번 호출 할 수 있습니다.

  4. 로컬 데이터베이스에서 스피닝 데이터를로드 중입니다.

는 문제점 : 활동 모두 4 스피너에 도시 그래서

나는 배라는 방법.

 1a.spinner1 
     1b.SPinner2 

     2a.Spinner1 
     2b.Spinner2 

제 3 스피너에 기반하여 4th 스피너 데이터가 완벽하게로드됩니다.

첫 번째 Spinner 선택한 항목 데이터 마지막 ​​반복 데이터 (세 번째 및 네 번째 회 전자)가 문자열 배열에만 저장되어 있기 때문에 두 번째 회 전자에 표시되지 않습니다.

제발 도와주세요. 모든 스피너에 데이터를 표시합니다.

내 방법은 먼저 이전의 아이 뷰를 제거 mContainerView.addView(rowView123); 에 뷰를 추가하기 전에 동적 스피너

// Helper for inflating a row Dynamic SPINNER 

private void inflateDynamic_SpinnerRow(String ObjectidTypeIdVal,final String LabelvalDynamic,String ValidationID,String SavedFormidValString 
      , final String FormObjectIDValue) 
    { 


     Log.i("Dynamic Spinner", LabelvalDynamic+"Form OBJECT Id"+FormObjectIDValue); 
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     final View rowView123 = inflater.inflate(R.layout.rowfor_dynamic_spinner_with_label, null); 
     final TextView Textview_Label1 = (TextView) rowView123.findViewById(R.id.textViewa1Labelxml); 
     final TextView Textview_Label2 = (TextView) rowView123.findViewById(R.id.textViewa2Labelxml); 
     RelativeLayoutDynamic2=(RelativeLayout) rowView123.findViewById(R.id.Realtive2); 


     DynamicSpinner123 = (Spinner) rowView123.findViewById(R.id.DynamicSpinner1xml); 

     DynamicSpinner123Dependent2=(Spinner)rowView123.findViewById(R.id.DynamicSpinner2xml); 


     DynamicSpinnerarr= new ArrayList<String>(); 
     DynamicSpinnerarr_IdValue= new ArrayList<String>(); 



     // DynamicSpinnerDependdentarr= new ArrayList<String>(); 


     if (!LabelvalDynamic.equals("")) 
     { 


//Converting string to Array list 

        try 
        { 


         MobileServiceList<th_tbdynamicspinner> results09; 
         results09 = mToDoTable_Form_DynamicSPinner_Table88_Local_Database.read(mPullQuery12378).get(); 

         //Offline Sync 
         if(!results09.isEmpty()) 
         { 


          Log.i("Data Is Available ", "From Lcoal>>>>>>" + "Data DynamicSPinner"); 


          for (int i = 0; i < results09.size(); i++) 
          { 

           Boolean mComplete_BooleanState=results09.get(i).isComplete(); 

           Dynamic_Spinner_ID_StringVal1_TableValue3=results09.get(i).getDynamic_Spinner_Id_StringOne(); 
           Form_Object_ID_StringVal1_TableValue3=results09.get(i).getForm_Object_Id_StringOne(); 
           Table_Name_StringVal1_TableValue3=results09.get(i).getTable_Name_StringOne(); 
           ID_Column_StringVal1_TableValue3=results09.get(i).getID_Column_StringOne(); 
           Data_Column_StringVal1_TableValue3=results09.get(i).getData_Column_StringOne(); 
           Data_Condition_StringVal1_TableValue3=results09.get(i).getData_Condition_StringOne(); 
           Dependent_SPinner_StringVal1_TableValue3=results09.get(i).getDependent_Spinner_StringOne(); 
           FormID_value_StringVal1_TableValue3=results09.get(i).getFormId_Val_StringOne(); 

           Log.i("Local Database Listview", Table_Name_StringVal1_TableValue3 + ":" + Form_Object_ID_StringVal1_TableValue3); 

           /* DynamicSpinnerarr.add(Dependent_SPinner_StringVal1_TableValue3); 
           DynamicSpinnerarr_IdValue.add(ID_Column_StringVal1_TableValue3);*/ 

           Collections.addAll(DynamicSpinnerarr,Dependent_SPinner_StringVal1_TableValue3); 
           Collections.addAll(DynamicSpinnerarr_IdValue,ID_Column_StringVal1_TableValue3); 

           if(Dependent_SPinner_StringVal1_TableValue3.equals("")) 
           { 
            Log.i("SPINN", "Spinner Data NotFound from Local"); 
           } 
           else 
           { 
            Log.i("Listview ", "Dynamic Spinner Data AVAILABLE"); 

            String Data[]=LabelvalDynamic.split(","); 
            Textview_Label1.setText(Data[0].toString()); 
            Textview_Label2.setText(Data[1].toString()); 
            arrayadpFIrstDynamic=new ArrayAdapter<String>(Form_DetailsAddPage.this,android.R.layout.simple_spinner_dropdown_item,DynamicSpinnerarr); 
            arrayadpFIrstDynamic.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
            DynamicSpinner123.setAdapter(arrayadpFIrstDynamic); 

           } 


          } 

         } 
         else 
         { 

          Log.i("Dyanmic SPinner ", "Data NotFound in Local"); 

         } 

        } catch (Exception e) 
        { 

         e.printStackTrace();; 
         Log.i("Local In Listview", "Exception Occur......!"); 
        } 

     } 
     else 
     { 
      mExclusiveEmptyView = rowView123; 
      //deleteButton.setVisibility(View.INVISIBLE); 

      Textview_Label1.setText("NOt Avilable"); 
     } 


/*Item Selected in First Dynamic Spinner :-)*/ 
     DynamicSpinner123 .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
     { 

      @Override 
      public void onItemSelected(AdapterView<?> spinner123, View view, int position, long id) 
      { 
       try 
       { 
        DynamicSpinnerDependdentarr= new ArrayList<String>(); 

        String selectedItem = spinner123.getItemAtPosition(position).toString(); 

        for (String member : DynamicSpinnerarr) 
        { 
         Log.i("Member name: ", member); 
        } 
        DYNAMICSPINNER_VALUE_ARRAY=new String[DynamicSpinnerarr.size()]; 
        DYNAMICSPINNER_VALUE_ARRAY=DynamicSpinnerarr.toArray(DYNAMICSPINNER_VALUE_ARRAY); 

        DYNAMICSPINNER_ID_VALUE_ARRAY=new String[DynamicSpinnerarr_IdValue.size()]; 
        DYNAMICSPINNER_ID_VALUE_ARRAY=DynamicSpinnerarr_IdValue.toArray(DYNAMICSPINNER_ID_VALUE_ARRAY); 



        Log.i("String Selcted",selectedItem); 
        Log.i(" MY ARRAY Selected :-)",Arrays.toString(DYNAMICSPINNER_VALUE_ARRAY)); 


      /*Finding the Id related to Dynamic Spinner*/ 
        for(int i=0;i<DYNAMICSPINNER_VALUE_ARRAY.length;i++) 
        { 


         if(selectedItem.equals(DYNAMICSPINNER_VALUE_ARRAY[i])) 
         { 

          DynamicSpinnerIdString=DYNAMICSPINNER_ID_VALUE_ARRAY[i]; 
          Log.i("DYNAMIC ID",DynamicSpinnerIdString); 

          // break; 
         } 

        } 


/*For Getting Spinner LocalDatabase Data*/ 



        MobileServiceList<th_tbdynamicspinnerdependenttable> results678; 
        results678 = mToDoTable_Form_DynamicSPinnerDependent_Table77_Local_Database.read(mPullQuery1234).get(); 


        //Offline Sync 
        if(!results678.isEmpty()) 
        { 

         RelativeLayoutDynamic2.setVisibility(View.VISIBLE); 

         Log.i("Data Is Available ", "From Lcoal>>>>>>" + "Data SPinner"); 


         for (int i = 0; i < results678.size(); i++) 
         { 


          Boolean mComplete_BooleanState=results678.get(i).isComplete(); 
          DyncamicDependent_ColumnIDStringVal1_TableValue2 = results678.get(i).getId_Column_StringOne(); 
          DynamicDependent_CITYList_VALUE_StringVal1_TableValue2 = results678.get(i).getCity_List_StringOne(); 

          Log.i("Local Database Listview", DyncamicDependent_ColumnIDStringVal1_TableValue2 + ":" + DynamicDependent_CITYList_VALUE_StringVal1_TableValue2); 

          Collections.addAll(DynamicSpinnerDependdentarr, DynamicDependent_CITYList_VALUE_StringVal1_TableValue2.split(",")); 


          if(DyncamicDependent_ColumnIDStringVal1_TableValue2.equals("")) 
          { 
           Log.i("SPINN", "Spinner Data NotFound from Local"); 

          } 
          else 
          { 
           Log.i("Listview ", "Spinner Data AVAILABLE"); 
           // TextviewLabel.setText(Labelval.toString()); 
           arrayadp2_Dependent=new ArrayAdapter<String>(Form_DetailsAddPage.this,android.R.layout.simple_spinner_dropdown_item,DynamicSpinnerDependdentarr); 
           arrayadp2_Dependent.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
           DynamicSpinner123Dependent2.setAdapter(arrayadp2_Dependent); 

          } 
         } 

        } 
        else 
        { 

         Log.i("DynamiceSPinner ", "Dependent Data NotFound in Local"); 

         RelativeLayoutDynamic2.setVisibility(View.GONE); 

        } 


       } catch (Exception e) 
       { 
        e.printStackTrace(); 
        Log.i("","Spinner Error OnItemSelectedClick"); 

       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) 
      { 
       // TODO Auto-generated method stub 
      } 
     }); 



     DynamicSpinner123.setId(viewsCount++); 
     allViews.add(DynamicSpinner123); 
     allValidation_arr.add(ValidationID); 
     allObjectid_arr.add(ObjectidTypeIdVal); 
     allSavedformid_arr.add(SavedFormidValString); 
     allformObject_id_arr.add(FormObjectIDValue); 

     DynamicSpinner123Dependent2.setId(viewsCount++); 
     allViews.add(DynamicSpinner123Dependent2); 
     allValidation_arr.add(ValidationID); 
     allObjectid_arr.add(ObjectidTypeIdVal); 
     allSavedformid_arr.add(SavedFormidValString); 
     allformObject_id_arr.add(FormObjectIDValue); 


     // Inflate at the end of all rows 
     mContainerView.addView(rowView123); 

    } 
+0

코드가 너무 복잡하여 주어진 작업을 수행하기가 어렵습니다. 그것은 두 가지 방법의 작업입니다. 첫 번째 방법은 스피너를 기존 arraylist에 추가하고 두 번째 방법은 해당 스피너 배열에 대해 onItemSelected 리스너를 구현합니다. ArrayList >을 사용하면 각 회 전자에 대한 데이터를 보유하는 것이 좋습니다. –

+0

배열 목록에 데이터를 저장하는 데 문제가 없지만 선택한 첫 번째 Spinner, 심지어 여러 동적 뷰를 만드는 경우에도 두 번째 종속 Spinner의 데이터를 반영해야합니다. – Kumar

답변

0

을 만들 수 있습니다.

//snippet. 

//remove all views 
mContainerView.removeAllViews(); 
//add new views 
mContainerView.addView(rowView123); 
+0

뷰 제거의 필요성은 무엇입니까? – Kumar

+0

내 문제는보기에 속하지 않습니다. 데이터로드 중입니다. – Kumar

+0

형, 귀하의 코드가 너무 복잡합니다, –

1
public class DynamicSpiner extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 

    //main spinner data 
    String firstSpinnerArray[] = new String[]{"One", "Two", "Three", "Four"}; 
    //dependent spinner data in arrays 
    List<String[]> dependentDataList = new ArrayList<>(); 

    //initialize main adapter and dependent adapter 
    ArrayAdapter<String> adapter, adapterDependent; 
    //initialize main Spinner and dependent Spinner 
    Spinner spinner, spinnerDependent; 
    //creating map for dependent Spinner to load the data according to its parent spinner 
    HashMap<Integer, Spinner> hashMap = new HashMap<Integer,Spinner>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dynamic_spiner); 
     //add data in List for dependentSpinner data 
     dependentDataList.add(new String[]{"One-1", "One-2", "One-3", "One-4"}); 
     dependentDataList.add(new String[]{"Two-1", "Two-2", "Two-3", "Two-4"}); 
     dependentDataList.add(new String[]{"Three-1", "Three-2", "Three-3", "Three-4"}); 
     dependentDataList.add(new String[]{"Four-1", "Four-2", "Four-3", "Four-4"}); 

     adapter = new ArrayAdapter<String>(DynamicSpiner.this, android.R.layout.simple_list_item_1); 
     adapterDependent = new ArrayAdapter<String>(DynamicSpiner.this, android.R.layout.simple_list_item_1); 


     for (int i=0; i<firstSpinnerArray.length; i++){ 
      spinner = new Spinner(DynamicSpiner.this); 
      spinnerDependent = new Spinner(DynamicSpiner.this); 
      spinner.setId(i); 
      spinnerDependent.setId(i); 
      hashMap.put(i, spinnerDependent); 
      spinner.setOnItemSelectedListener(this); 
      adapter.add(firstSpinnerArray[i]); 
     } 
     spinner.setAdapter(adapter); 
    } 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     String getDependentArray[] = dependentDataList.get(position); 
     for(String string : getDependentArray){ 
      adapterDependent.add(string); 
     } 
     int spinnerId = view.getId(); 
     if(spinnerId == position){ 
      Spinner getSpinnerDependent = hashMap.get(position); 
      getSpinnerDependent.setAdapter(adapterDependent); 
     } 
    } 

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

    } 
} 

내가 이것을 테스트하지 않았습니다. 희망이 당신을 도울 것입니다.

+0

답장을 보내 주셔서 감사합니다 :)하지만 내 편에서는 Spinner1 선택 Spinner2 데이터는 로컬 데이터베이스에서로드됩니다. – Kumar

+0

예, 선택한 회 전자가 for 루프에 적용됩니다. 메인 스피너에 따르면 데이터를 dependentSpinner에로드합니다. –

+0

내 문제를 올바르게 읽으십시오.이 작업은 작동하거나하지 않을 수 있습니다. 하드 코딩 된 값을 추가하면 작동 할 수 있습니다. 나는 첫 번째 회 전자에서 데이터베이스 valueid를 기반으로 그 방법을 여러 번 사용하고 두 번째 회 전자 데이터를로드하려고합니다. – Kumar