【问题标题】:How to get the String value from multiple Spinner in ListView?如何从 ListView 中的多个 Spinner 获取字符串值?
【发布时间】:2023-04-05 12:00:01
【问题描述】:

我有一个 ListView,在 ListView 的每一行我都有一个 Spinner。 在拥有上述 ListView 的 MainActivity 中,我有一个按钮提交 我希望当用户在 ListView 的每个 Spinner 上完成选择值时,他们按下 buttonSubmit 并且 buttonSubmit 的侦听器将获取 ListView 每个 Spinner 的所有值并将它们推送到 SQLiteDatabase。 我的问题是,buttonSubmit 不在 ListView 的 CustomAdapter 类中,它位于拥有 ListView 的 MainActivity 中。 因此,当用户单击 按钮提交 这是我的代码: * ListView的自定义适配器类代码,每行都有一个Spinner:

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) {

}

}

*拥有 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;
    }
}

}

请帮帮我:(

*这是用户界面: enter image description here

【问题讨论】:

    标签: android listview android-activity android-spinner


    【解决方案1】:

    你的架构有点坏了。您不会将数据保存在任何地方,因此确实无法全部检索。您的数据模型需要反映在您的ListView 中显示的数据,并且当用户更改数据(通过在Spinner 中选择某些内容)时,您需要通过更新您的数据模型来响应onItemSelected() 回调用户选择的项目。假设Activity 将对数据的引用传递到您的适配器,Activity 始终可以访问更新的数据。

    【讨论】:

    • 你好大卫,非常感谢你帮助我,我解决了我的问题。再次感谢您!!!!!!! ^^
    【解决方案2】:

    onItemSelected() 使用这个

    spinner.getSelectedItem().toString();
    

    获取所选项目。为了能够使用 MainActvity 中的值,请尝试使用 SharedPreferences 来保存所选项目的值。

    【讨论】:

    • @ViệtDũngLê 随时:)
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多