android在特定位置的列表视图中禁用editText

时间:2016-05-23 13:02:58

标签: android listview android-edittext

我有一个列表视图,我想在第一个位置禁用editText。这就是我所做的:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    final PatientView patientView;

    if(convertView==null){
        LayoutInflater inflater=LayoutInflater.from(context);
        convertView=inflater.inflate(R.layout.lay_add_session_view,null);
        patientView=new PatientView();
        patientView.edtSessionDescription= (EditText) convertView.findViewById(R.id.edtSessionDescription);
        patientView.edtSessionNumber= (EditText) convertView.findViewById(R.id.edtSessionNumber);
        patientView.txtSessionTime= (TextView) convertView.findViewById(R.id.txtSessionTime);
        patientView.btnAdd= (Button) convertView.findViewById(R.id.btnAdd);
        patientView.btnDelete= (Button) convertView.findViewById(R.id.btnDelete);

        convertView.setTag(patientView);
    } else {
        patientView= (PatientView) convertView.getTag();
    }

    patientView.edtSessionNumber.setText(modelPatientArrayList.get(position).getSessionNumber());
    patientView.edtSessionNumber.setTag(position);
    patientView.edtSessionDescription.setText(modelPatientArrayList.get(position).getSessionDescription());
    patientView.txtSessionTime.setText(modelPatientArrayList.get(position).getTime());



    if(0==(Integer)patientView.edtSessionNumber.getTag()){
        patientView.edtSessionNumber.setEnabled(false);
    }

    patientView.btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.e("tag position",(Integer) patientView.edtSessionNumber.getTag()+"");
            updateFirstSession(modelPatientArrayList.get(position), patientView.edtSessionDescription.getText().toString());

            modelPatientArrayList.clear();
            modelPatientArrayList.addAll(dbUtil.getPatientSession());
            patientView.btnAdd.setText("edit");
            patientView.btnAdd.setTag(position);
            notifyDataSetChanged();

        }
    });

    patientView.btnDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            deleteFromDataBase(modelPatientArrayList.get(position));
            modelPatientArrayList.clear();
            modelPatientArrayList.addAll(dbUtil.getPatientSession());
            notifyDataSetInvalidated();
        }
    });

    return convertView;
} 

但问题是它在滚动后也禁用了其他视图的edittext。任何人都可以告诉我我做错了什么。

2 个答案:

答案 0 :(得分:0)

把这段代码,应该解决你的问题。 if(position == 0) patientView.edtSe​​ssionNumber.setEnabled(假);

答案 1 :(得分:0)

由于ListView重新使用视图,因此您需要为两种情况编写代码

patientView.edtSessionNumber.setEnabled( (position == 0) ? false : true);