Android 在listView中获取微调器更改
我有一个Android 在listView中获取微调器更改,android,listview,spinner,Android,Listview,Spinner,我有一个ListView和一个CustomAdapter,最多有50行(一次屏幕上只有11行)。每行包含一个微调器和两个EditTexts。我为这三列中的每一列向适配器传递3组数据。选择微调器项目或更改文本时,我希望修改适配器内的相关数据集,以便调用活动检索该数据集 我可以针对每个微调器注册OnItemSelectedListener(),但是,我找不到方法知道微调器位于哪一行。因此,我无法更新数据集 这是适配器 SQLiteDatabase db; Activity
ListView
和一个CustomAdapter
,最多有50行(一次屏幕上只有11行)。每行包含一个微调器和两个EditText
s。我为这三列中的每一列向适配器传递3组数据。选择微调器
项目或更改文本时,我希望修改适配器内的相关数据集,以便调用活动
检索该数据集
我可以针对每个微调器注册OnItemSelectedListener()
,但是,我找不到方法知道微调器位于哪一行。因此,我无法更新数据集
这是适配器
SQLiteDatabase db;
Activity mActivity;
int [] mCategories;
String [] mComments;
String [] allCategories;
int [] mAmounts;
String [] spinnerValues;
TransCatListAdapter(Activity activity, int[] categories, String[] comments, int[] amounts){
super (activity, R.layout.transcat_row, comments);
mActivity = activity;
mCategories = categories;
mComments = comments;
mAmounts = amounts;
db = DatabaseHelper.getInstance(activity);
}
public View getView(int pos, View convertView, ViewGroup parent) {
View row = convertView;
if (row==null) {
LayoutInflater inflater=mActivity.getLayoutInflater();
row = inflater.inflate(R.layout.transcat_row, null);
}
Spinner SPNCategory = (Spinner) row.findViewById(R.id.trncatrow_category);
EditText ETComment = (EditText) row.findViewById(R.id.trncatrow_comment);
EditText ETAmount = (EditText) row.findViewById(R.id.trncatrow_amount);
SPNCategory.setAdapter(new CategorySpinnerAdapter(mActivity, R.layout.categoryspinnerstyle, DatabaseMethods.getCategories(db)));
ETComment.setText(mComments[pos]);
ETAmount.setText(Utils.formatAsMoneyString(mAmounts[pos]));
return (row);
}
因此,如果我理解正确,您希望能够向您的微调器注册OnItemSelectedListener
,但您希望能够识别哪个微调器是正确的?试试这个
getView(int pos, View convertView, ViewGroup parent) {
...
spinner SPNCategory = (Spinner) row.findViewById(R.id.trncatrow_category);
spinner.setOnItemSelectedListener(new YourSpinnerListener(pos);
...
private class YourSpinnerListener implements OnItemSelectedListener {
private int mSpinnerPosition;
public YourSpinnerListener(int spinnerPosition) {
mSpinnerPosition = spinnerPosition;
}
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
getView(int-pos、视图转换视图、视图组父视图){
...
微调器spnCategray=(微调器)行.findViewById(R.id.trncatrow_类别);
spinner.setOnItemSelectedListener(新的您的spinner Listener(pos));
...
私有类YourSpinnerListener实现了OnItemSelectedListener{
私人内部mSpinnerPosition;
public YourSpinnerListener(内部spinnerPosition){
mSpinnerPosition=喷丝头位置;
}
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、内部arg2、长arg3){
//TODO自动生成的方法存根
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
}
这个实现OnItemSelectedListener的类现在有一个对微调器位置的引用
玩得开心!你的问题解决了吗?太棒了,这正是我想做的。回答得很好。非常感谢。