我被困在 listview 的适配器中:我在适配器中有一个 textView(Name)、checkbox、editText(quantity of name)。默认 editText 将被禁用,但是当我选中任何复选框时,只有我能够输入数量。在 getView 中,我坚持编写代码。在 Listview 的 OnItemClick 中,我需要存储 Model 对象并存储在 DataBase 上。
package com.example.lokesh.agrigate.adapters;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import com.example.lokesh.agrigate.R;
import com.example.lokesh.agrigate.models.Crop;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by Amit on 2015-10-10.
*/
public class CropListViewAdapter extends BaseAdapter {
Context mContext;
List<Integer> positions;
List<Crop> mCrops;
public CropListViewAdapter(Context mContext, List<Crop> mCrops) {
this.mContext = mContext;
this.mCrops = mCrops;
mSelectedList=new HashMap<>();
positions=new ArrayList<>();
}
Map<Crop,Integer> mSelectedList=null;
public void addCrop(List<Crop> crops){
this.mCrops=crops;
}
@Override
public int getCount() {
return mCrops.size();
}
@Override
public Crop getItem(int position) {
return mCrops.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Crop crop=getItem(position);
Holder mHolder=null;
if(convertView==null){
LayoutInflater inflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView= inflater.inflate(R.layout.crop_list_item,null);
mHolder=new Holder();
convertView.setTag(mHolder);
mHolder.mName=(TextView)convertView.findViewById(R.id.crpname);
mHolder.mHelpText=(TextView)convertView.findViewById(R.id.quantityHelpText);
mHolder.mCheckox=(CheckBox)convertView.findViewById(R.id.checkCrop);
mHolder.mQuantityEditText=(EditText)convertView.findViewById(R.id.quantity);
mHolder.mQuantityEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
mHolder.mCheckox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (int) buttonView.getTag();
if (isChecked) {
} else {
}
buttonView.setChecked(isChecked);
}
});
}else{
mHolder=(Holder)convertView.getTag();
}
mHolder.mCheckox.setTag(position);
mHolder.mName.setText(crop.toString());
return convertView;
}
public void setData(List<Crop> crops) {
this.mCrops=crops;
}
class Holder{
TextView mName;
TextView mHelpText;
CheckBox mCheckox;
EditText mQuantityEditText;
}
}
活动 OnItemClick :
Map<Crop,Integer> data=new HashMap<>();
AdapterView.OnItemClickListener onCropItemClickListener=new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckBox checkBox=(CheckBox)view.findViewById(R.id.checkCrop);
Crop crop=(Crop)parent.getItemAtPosition(position);
if(checkBox.isChecked()){
EditText ed=(EditText)view.findViewById(R.id.quantity);
if(!TextUtils.isEmpty(ed.getText().toString()))
data.put(crop,Integer.parseInt(ed.getText().toString()));
}else{
data.remove(crop);
}
}
};
请帮我纠正适配器和 OnItemClick :