Java 如何从EditText的ListView获取不可见视图,并在android中保留对EditText所做的更改?
我突然想到一个问题。我有一个EditText的列表视图(共6列)。 我有保存按钮/。保存时,我希望所有文本都显示在每个编辑文本中(即使对其进行了更改)。如果视图不可见,则获取空视图。并且对EditText所做的更改不会在滚动时保留(它将重置为旧值)。下面是代码。 适配器类Java 如何从EditText的ListView获取不可见视图,并在android中保留对EditText所做的更改?,java,android,listview,android-edittext,android-adapter,Java,Android,Listview,Android Edittext,Android Adapter,我突然想到一个问题。我有一个EditText的列表视图(共6列)。 我有保存按钮/。保存时,我希望所有文本都显示在每个编辑文本中(即使对其进行了更改)。如果视图不可见,则获取空视图。并且对EditText所做的更改不会在滚动时保留(它将重置为旧值)。下面是代码。 适配器类 private class MyPrescriptionsAdapter extends BaseAdapter implements View.OnClickListener{ private Activity a
private class MyPrescriptionsAdapter extends BaseAdapter implements View.OnClickListener{
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private LayoutInflater inflater = null;
View vi;
int position;
Typeface fontFields;
public MyPrescriptionsAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data = d;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressLint("InflateParams")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final Holder holder;
this.position=position;
// tviewStrength.requestFocus();
if (convertView == null){
holder=new Holder();
convertView = inflater.inflate(R.layout.myprescriptions_adapter, null);
holder.tviewMedicine = (TextView) convertView.findViewById(R.id.tview_medicine);
holder.tviewStrength = (EditText) convertView.findViewById(R.id.tview_strenth);
holder.tviewUnit = (EditText) convertView.findViewById(R.id.edtxt_strenthunit);
holder.tviewQty = (EditText) convertView.findViewById(R.id.tview_qty);
holder.tviewFrequency = (EditText) convertView.findViewById(R.id.tview_frequency);
holder.tviewMode = (EditText) convertView.findViewById(R.id.tview_mode);
holder.tviewEndDate = (TextView) convertView.findViewById(R.id.tview_enddate);
holder.tviewFreqId = (TextView) convertView.findViewById(R.id.tview_freqId);
holder.tviewModeId = (TextView) convertView.findViewById(R.id.tview_modeId);
holder.tviewDrugId = (TextView) convertView.findViewById(R.id.tview_unitId);
convertView.setTag(holder);
}else {
holder= (Holder) convertView.getTag();
}
fontFields = Typeface.createFromAsset(activity
.getAssets(), activity.getResources().getString(R.string.font_RobotoLightItalic));
holder.tviewMedicine.setTypeface(fontFields);
holder.tviewStrength.setTypeface(fontFields);
holder.tviewQty.setTypeface(fontFields);
holder.tviewFrequency.setTypeface(fontFields);
holder.tviewMode.setTypeface(fontFields);
holder.tviewEndDate.setTypeface(fontFields);
final HashMap<String, String> listMedication;
listMedication = data.get(position);
// Setting all values in listview
holder.tviewMedicine.setText(listMedication.get("medicine_name"));
holder.tviewStrength.setText(listMedication.get(activity.getString(R.string.tag_Strength)));
holder.tviewQty.setText(listMedication.get(activity.getString(R.string.tag_Quantity)));
holder.tviewFrequency.setText(listMedication.get(activity.getString(R.string.tag_frequency)));
holder.tviewMode.setText(listMedication.get(activity.getString(R.string.tag_mode)));
holder.tviewUnit.setText(listMedication.get(activity.getString(R.string.tag_unitname)));
holder.tviewEndDate.setText(listMedication.get(activity.getString(R.string.tag_EndDate)));
holder.tviewModeId.setText(listMedication.get(activity.getString(R.string.tag_AdminMode)));
holder.tviewFreqId.setText(listMedication.get(activity.getString(R.string.tag_Frequency)));
holder.tviewDrugId.setText(listMedication.get(activity.getString(R.string.tag_Drugid)));
holder.tviewFrequency.setOnClickListener(this);
holder.tviewMode.setOnClickListener(this);
holder.tviewUnit.setOnClickListener(this);
holder.tviewQty.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
View childView = listviewMeditation.getFocusedChild();
if (childView != null) {
TextView edEndDate = (TextView) childView.findViewById(R.id.tview_enddate);
EditText edFreq = (EditText) childView.findViewById(R.id.tview_frequency);
setEndDate(edEndDate, edFreq.getText().toString(), holder.tviewQty.getText().toString());
}
}
});
return convertView;
}
private class Holder{
TextView tviewMedicine;
EditText tviewStrength;
EditText tviewQty;
EditText tviewFrequency;
EditText tviewMode;
TextView tviewEndDate;
EditText tviewUnit;
TextView tviewFreqId;
TextView tviewModeId;
TextView tviewDrugId;
}
私有类MyPrescriptionAdapter扩展BaseAdapter实现View.OnClickListener{
私人活动;
私有数组列表数据;
专用充气机=空;
视图六;
内部位置;
字体字体字段;
公共MyPrescriptionAdapter(活动a,ArrayList d){
活动=a;
数据=d;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
@凌驾
public int getCount(){
返回data.size();
}
@凌驾
公共对象getItem(int位置){
返回数据。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@SuppressLint(“充气参数”)
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持有人;
这个位置=位置;
//tviewStrength.requestFocus();
if(convertView==null){
保持架=新保持架();
convertView=充气机。充气(R.layout.myu适配器,空);
holder.tviewMedicine=(TextView)convertView.findViewById(R.id.tview\u medicine);
holder.tviewStrength=(EditText)convertView.findViewById(R.id.tview_-strength);
holder.tviewUnit=(EditText)convertView.findViewById(R.id.edText\u strengthUnit);
holder.tviewQty=(EditText)convertView.findViewById(R.id.tview\u数量);
holder.tviewFrequency=(EditText)convertView.findViewById(R.id.tview_frequency);
holder.tviewMode=(EditText)convertView.findViewById(R.id.tview_模式);
holder.tviewEndDate=(TextView)convertView.findViewById(R.id.tview\u enddate);
holder.tviewFreqId=(TextView)convertView.findViewById(R.id.tview\u freqId);
holder.tviewModeId=(TextView)convertView.findViewById(R.id.tview\u modeId);
holder.tviewDrugId=(TextView)convertView.findViewById(R.id.tview\u unitId);
convertView.setTag(支架);
}否则{
holder=(holder)convertView.getTag();
}
fontFields=Typeface.createFromAsset(活动
.getAssets()、activity.getResources().getString(R.string.font_robotolittic));
holder.tviewMedicine.setTypeface(字体字段);
holder.tviewStrength.setTypeface(字体字段);
holder.tviewQty.setTypeface(字体字段);
holder.tviewFrequency.setTypeface(字体字段);
holder.tviewMode.setTypeface(fontFields);
holder.tviewEndDate.setTypeface(字体字段);
最终哈希图列表;
ListMedicing=data.get(位置);
//在listview中设置所有值
holder.tviewMedicine.setText(listpedicing.get(“medicine_name”));
holder.tviewStrength.setText(list.get(activity.getString(R.string.tag_-Strength));
holder.tviewQty.setText(list.get(activity.getString(R.string.tag_Quantity));
holder.tviewFrequency.setText(listmedicing.get(activity.getString(R.string.tag_frequency));
holder.tviewMode.setText(listmedicing.get(activity.getString(R.string.tag_模式));
holder.tviewUnit.setText(listMedicing.get(activity.getString(R.string.tag_unitname));
holder.tviewEndDate.setText(listMedicing.get(activity.getString(R.string.tag_EndDate));
holder.tviewModeId.setText(listmedicing.get(activity.getString(R.string.tag_AdminMode));
holder.tviewFreqId.setText(list.get(activity.getString(R.string.tag_Frequency));
holder.tviewDrugId.setText(listpedicing.get(activity.getString(R.string.tag_Drugid));
holder.tviewFrequency.setOnClickListener(此);
holder.tviewMode.setOnClickListener(此);
holder.tviewUnit.setOnClickListener(此);
holder.tviewQty.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void PostTextChanged(可编辑){
View-childView=ListView.getFocusedChild();
if(childView!=null){
TextView-edEndDate=(TextView)childView.findViewById(R.id.tview\u enddate);
EditText edFreq=(EditText)childView.findViewById(R.id.tview\u频率);
setEndDate(edEndDate,edFreq.getText().toString(),holder.tviewQty.getText().toString());
}
}
});
返回视图;
}
私人阶级持有者{
TextView电视医学;
编辑文本TVIEWSTRENGHT;
编辑文本tviewQty;
编辑文本tviewFrequency;
编辑文本tviewMode;
文本视图日期;
编辑文本tviewUnit;
文本视图tviewFreqId;
文本视图tviewModeId;
文本视图tviewDrugId;
}
在这里,下面我访问所有必需的EditText文本
public void getData() {
int countChild= listviewMeditation.getCount();
HashMap<String,String>mapEdValues;
EditText edStrenghth;
EditText edQty;
EditText edFrequency;
EditText edMode;
EditText edUnit;
TextView edMedicine,edEndate,tvDrugId,tvModeId,tvFreqId;
if (countChild>0){
for (int i=0;i<countChild;i++){
mapEdValues=new HashMap<>();
view=listviewMeditation.getChildAt(i); // here i am getting null view
edStrenghth = (EditText) view.findViewById(R.id.tview_strenth);
edQty = (EditText) view.findViewById(R.id.tview_qty);
edUnit = (EditText) view.findViewById(R.id.edtxt_strenthunit);
edEndate = (TextView) view.findViewById(R.id.tview_enddate);
tvDrugId = (TextView) view.findViewById(R.id.tview_unitId);
tvFreqId = (TextView) view.findViewById(R.id.tview_freqId);
tvModeId = (TextView) view.findViewById(R.id.tview_modeId);
mapEdValues.put("added", String.valueOf(addCount));
mapEdValues.put(getString(R.string.tag_Strength), edStrenghth.getText().toString());
mapEdValues.put(getString(R.string.tag_Quantity), edQty.getText().toString());
mapEdValues.put(getString(R.string.tag_EndDate), edEndate.getText().toString());
mapEdValues.put(getString(R.string.tag_unitname), edUnit.getText().toString());
mapEdValues.put(getString(R.string.tag_Frequency), tvFreqId.getText().toString());
mapEdValues.put(getString(R.string.tag_AdminMode), tvModeId.getText().toString());
mapEdValues.put(getString(R.string.tag_DrugId), tvDrugId.getText().toString());
mapEdValues.put(getString(R.string.tag_DrugGroupId), "0");
editedMedication.add(mapEdValues);
}
}
}
public void getData(){
int countChild=listViewMurtination.getCount();
HashMapedValues;
编辑文本Edstrength;
编辑文本数量;
编辑频率;
编辑文本模式;
编辑文本教育;
TextView edMedicine、edEndate、tvDrugId、tvModeId、tvFreqId;
如果(countChild>0){
对于(int i=0;i公共视图获取)