2016-11-16 2 views
2

У меня есть ListView, в каждой строке ListView у меня есть Spinner. В MainActivity, у которого есть приведенный выше ListView, у меня есть кнопкаSubmit . Я хочу, когда пользователи закончат выбирать значение для каждого Spinner ListView, они нажимают кнопку buttonSubmit, и слушатель кнопкиSubmit получит все значение каждого Spinner из ListView и вставьте их в SQLiteDatabase. Моя проблема здесь в том, что buttonSubmit не находится в классе CustomAdapter ListView, он находит в MainActivity, который владеет ListView. Так что я не знаю, как получить значение от нескольких Spinners в каждой строке ListView во что-то вроде String Array, когда пользователь нажимает на кнопку Показать вот мой код: * код пользовательского класса адаптера ListView , который имеет Spinner в каждой строке:Как получить значение String из нескольких Spinner в ListView?

public class ChonLopTheoMonAdapter extends ArrayAdapter<MonHocDTO> implements AdapterView.OnItemSelectedListener{ 
Context context; 
int layout; 
ArrayList<MonHocDTO> listMonHoc; 

ArrayAdapter<String> adapterSpinner; 
String[] listLop; 


public ChonLopTheoMonAdapter(Context context, int layout, ArrayList<MonHocDTO> listMonHoc) { 
    super(context, layout, listMonHoc); 
    this.context = context; 
    this.layout = layout; 
    this.listMonHoc = listMonHoc; 
} 



public class ViewHolder { 
    TextView txtTenMonHoc_ChonMon; 
    Spinner spChonLop; 
} 

@NonNull 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = inflater.inflate(this.layout, parent, false); 
     holder = new ViewHolder(); 
     holder.txtTenMonHoc_ChonMon = (TextView) convertView.findViewById(R.id.txtTenMonHoc_ChonMon); 
     holder.spChonLop = (Spinner) convertView.findViewById(R.id.spChonLop); 

     convertView.setTag(holder); 
    } 
    else{ 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.txtTenMonHoc_ChonMon.setText(this.listMonHoc.get(position).getTenMonHoc()); 

    switch (this.listMonHoc.get(position).getIdMonHoc()){ 
     case "QTM": 
      listLop = this.context.getResources().getStringArray(R.array.QTM); 
      break; 
     case "CTDL": 
      listLop = this.context.getResources().getStringArray(R.array.CTDL); 
      break; 
     case "TCC": 
      listLop = this.context.getResources().getStringArray(R.array.TCC); 
      break; 
    } 
    adapterSpinner = new ArrayAdapter<String>(this.context,android.R.layout.simple_spinner_item,listLop); 
    adapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    holder.spChonLop.setAdapter(adapterSpinner); 

    holder.spChonLop.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) { 

     } 

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

     } 
    }); 

    return convertView; 
} 

@Override 
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 

} 

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

} 

}

* Код MainActivity, что владельцем ListView:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
ListView lvChonLopTheoMonHoc; 
Button btnXacNhanChonLop; 

MonHocDAO monHocDAO; 

ArrayList<MonHocDTO> listMonHoc; 
ChonLopTheoMonAdapter chonLopTheoMonAdapter; 

TypedArray thuTuMonHoc; 
String[] tenMonHoc; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    addControls(); 
} 

private void addControls() { 
    monHocDAO = new MonHocDAO(MainActivity.this); 
    lvChonLopTheoMonHoc = (ListView) findViewById(R.id.lvChonLopTheoMonHoc); 
    btnXacNhanChonLop = (Button) findViewById(R.id.btnXacNhanChonLop); 
    listMonHoc = new ArrayList<>(); 
    listMonHoc = monHocDAO.layListMonHoc("NAM11"); 

    chonLopTheoMonAdapter = new ChonLopTheoMonAdapter(MainActivity.this, R.layout.layout_chon_mon_hoc_theo_lop, listMonHoc); 
    chonLopTheoMonAdapter.notifyDataSetChanged(); 
    lvChonLopTheoMonHoc.setAdapter(chonLopTheoMonAdapter); 


    btnXacNhanChonLop.setOnClickListener(MainActivity.this); 
} 

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.btnXacNhanChonLop: 
      break; 
    } 
} 

}

пожалуйста, помогите мне :(

* Вот UI: enter image description here

ответ

0

Ваша архитектура любопытное сломана. Вы не сохраняете данные в любом месте, поэтому нет способа получить все это. Ваша модель данных должна отражать данные, отображаемые в вашем ListView, и когда пользователь меняет данные (выбирая что-то в Spinner), вам необходимо отреагировать на обратный вызов onItemSelected(), обновив модель данных с помощью выбранного пользователем элемента. Предполагая, что Activity передает ссылку на данные в ваш адаптер, Activity имеет доступ к обновленным данным все время.

+1

Привет, Дэвид, большое спасибо за помощь, я решил свою проблему. еще раз, спасибо !!!!!! ^^ –

0

onItemSelected() использовать эту

spinner.getSelectedItem().toString(); 

, чтобы получить выбранный элемент. чтобы иметь возможность использовать значение в MainActvity, попробуйте использовать SharedPreferences для сохранения значения выбранного элемента.

+0

спасибо за помощь другу :) –

+0

@ ViệtDũngLê в любое время :) –