Android 如何从ListView中的多个微调器获取字符串值?

Android 如何从ListView中的多个微调器获取字符串值?,android,listview,android-activity,android-spinner,Android,Listview,Android Activity,Android Spinner,我有一个ListView,在ListView的每一行我都有一个微调器。 在拥有上述ListView的Main活动中,我有一个按钮Submit 我希望当用户在ListView的每个微调器上完成选择值时,他们按buttonSubmit,buttonSubmit的侦听器将获得ListView的每个微调器的所有值,并将它们推送到SQLiteDatabase中。 我这里的问题是,buttonSubmit不在ListView的CustomAdapter类中,它位于拥有ListView的MainActivit

我有一个ListView,在ListView的每一行我都有一个微调器。 在拥有上述ListView的Main活动中,我有一个按钮Submit 我希望当用户在ListView的每个微调器上完成选择值时,他们按buttonSubmit,buttonSubmit的侦听器将获得ListView的每个微调器的所有值,并将它们推送到SQLiteDatabase中。 我这里的问题是,buttonSubmit不在ListView的CustomAdapter类中,它位于拥有ListView的MainActivity中。 因此,我不知道当用户单击 按钮提交 这是我的密码: *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) {

}
公共类ChonLopTheoMonAdapter扩展ArrayAdapter实现AdapterView.OnItemSelectedListener{
语境;
int布局;
ArrayList listMonHoc;
阵列适配器;
字符串[]listLop;
公共ChonLopTheoMonAdapter(上下文、int布局、ArrayList listMonHoc){
超级(上下文、布局、列表);
this.context=上下文;
this.layout=布局;
this.listMonHoc=listMonHoc;
}
公共类视图持有者{
TextView txtTenMonHoc_ChonMon;
纺纱机;
}
@非空
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)this.context.getSystemService(context.LAYOUT\u充气器\u服务);
视窗座;
if(convertView==null){
convertView=充气机充气(this.layout,parent,false);
holder=新的ViewHolder();
holder.txtTenMonHoc_ChonMon=(TextView)convertView.findViewById(R.id.txtTenMonHoc_ChonMon);
holder.spChonLop=(微调器)convertView.findViewById(R.id.spChonLop);
convertView.setTag(支架);
}
否则{
holder=(ViewHolder)convertView.getTag();
}
holder.txtTenMonHoc_ChonMon.setText(this.listMonHoc.get(position.getTenMonHoc());
开关(this.listMonHoc.get(position.getIdMonHoc()){
案例“QTM”:
listLop=this.context.getResources().getStringArray(R.array.QTM);
打破
案例“CTDL”:
listLop=this.context.getResources().getStringArray(R.array.CTDL);
打破
案例“TCC”:
listLop=this.context.getResources().getStringArray(R.array.TCC);
打破
}
adapterSpinner=new ArrayAdapter(this.context,android.R.layout.simple\u spinner\u项,listLop);
adapterSpinner.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
支架spChonLop设置适配器(适配器固定器);
holder.spChonLop.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共位置(适配器视图适配器视图视图视图视图内部位置长l){
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
});
返回视图;
}
@凌驾
已选择公共视图(AdapterView AdapterView、View视图、int i、long l){
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
}

*拥有listView的MainActivity的代码:

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;
    }
}
public类MainActivity扩展AppCompatActivity实现View.OnClickListener{
ListView lvChonLopTheoMonHoc;
按钮btnXacNhanChonLop;
蒙霍克道蒙霍克道;
ArrayList listMonHoc;
ChonLopTheoMonAdapter ChonLopTheoMonAdapter;
Darray Thumonhoc型;
字符串[]tenMonHoc;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addControls();
}
私有void addControls(){
monHocDAO=新monHocDAO(MainActivity.this);
lvChonLopTheoMonHoc=(ListView)findViewById(R.id.lvChonLopTheoMonHoc);
btnXacNhanChonLop=(按钮)findViewById(R.id.btnXacNhanChonLop);
listMonHoc=newarraylist();
listMonHoc=monHocDAO.layListMonHoc(“NAM11”);
chonLopTheoMonAdapter=新的chonLopTheoMonAdapter(main activity.this,R.layout.layout\u chon\u mon\u hoc\u theo\u lop,listMonHoc);
chonLopTheoMonAdapter.notifyDataSetChanged();
lvChonLopTheoMonHoc.setAdapter(chonLopTheoMonAdapter);
btnXacNhanChonLop.setOnClickListener(MainActivity.this);
}
@凌驾
公共void onClick(视图){
开关(view.getId()){
案例R.id.btnXacNhanChonLop:
打破
}
}
}

请帮助我:(

*以下是用户界面:

您的体系结构有点崩溃。您没有将数据保存在任何地方,因此确实无法检索所有数据。您的数据模型需要反映在
列表视图中显示的数据,并且当用户更改数据时(通过在
微调器中选择某个内容),您需要对
onItemSelected()作出反应
通过使用用户选择的项更新数据模型进行回调。假设
活动将对数据的引用传递到适配器中,则
活动
始终可以访问更新的数据。

onItemSelected()使用此选项


获取所选项目。要能够在Main活动中使用该值,请尝试使用SharedReferences保存所选项目的值。

你好,David,非常感谢你的帮助,我解决了我的问题。再次感谢你!!!!^^@ViệtDũngLêanytime:)
spinner.getSelectedItem().toString();