Java 如何从EditText的ListView获取不可见视图,并在android中保留对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

我突然想到一个问题。我有一个EditText的列表视图(共6列)。 我有保存按钮/。保存时,我希望所有文本都显示在每个编辑文本中(即使对其进行了更改)。如果视图不可见,则获取空视图。并且对EditText所做的更改不会在滚动时保留(它将重置为旧值)。下面是代码。 适配器类

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公共视图获取)