Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在listView中获取微调器更改_Android_Listview_Spinner - Fatal编程技术网

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的类现在有一个对微调器位置的引用


玩得开心!

你的问题解决了吗?太棒了,这正是我想做的。回答得很好。非常感谢。