Android - 使用自定义列表视图适配器编辑文本和微调器

时间:2017-02-10 06:16:10

标签: android listview android-edittext

我有一个问题,成千上万的人在stackoverflow中有问题,我觉得再次问我很难,但我读了所有的问题并试图实现我的情况,但没有一个工作或者我可能错误地实现了它们。

这是我的问题。我有一个自定义列表视图,它有一个微调器和edittext。我动态创建行。众所周知,edittext搞砸了,当我实现滚动时,视图持有者模式可以平滑滚动,但我的listview仍然无法正常显示。滚动时,编辑文本仍然是重复的。我也试图在另一个类中保存用户输入,因为我有一个微调器和edittext。我的 列表视图行布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
>


<Spinner
    android:layout_width="128dp"
    android:layout_height="wrap_content"
    android:id="@+id/ListViewSpinner"
    android:layout_marginTop="10dp"
    />

<EditText
    android:layout_marginRight="12dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:id="@+id/ListViewEditText"
    android:textSize="16dp"
    android:hint="Enter the CRN"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/ListViewSpinner"
    android:layout_toEndOf="@+id/ListViewSpinner" />

</RelativeLayout>

我的 CourseClass.java

public class CourseClass {
private ArrayList<String> course_name;
private String course_crn;


public CourseClass(ArrayList<String> course_name, String course_crn) {
    super();
    this.setCourse_crn(course_crn);
    this.setCourse_name(course_name);
}

public ArrayList<String> getCourse_name() {
    return course_name;
}

public void setCourse_name(ArrayList<String> course_name) {
    this.course_name = course_name;
}

public String getCourse_crn() {
    return course_crn;
}

public void setCourse_crn(String course_crn) {
    this.course_crn = course_crn;
}
}

我的 CourseAdapter.java

public class CourseAdapter extends ArrayAdapter<CourseClass> {
Context context;

public CourseAdapter(Context context, int layoutResourceId, int resource) {
    super(context, resource);
    this.layoutResourceId = layoutResourceId;
    this.context = context;

}

@Override
public void add(CourseClass object) {
    super.add(object);
}

@Override
public void remove(CourseClass object) {
    super.remove(object);
}

@Override
public long getItemId(int position) {
    return super.getItemId(position);
}

@Override
public int getCount() {
    return super.getCount();
}


@NonNull
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View row = convertView;
    final ViewHolder holder;
    if (row == null) {


        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(R.layout.list_view_row_layout, null);
        holder = new ViewHolder();
        holder.courseSpinner = (Spinner) row.findViewById(R.id.ListViewSpinner);
        holder.courseCrn = (EditText) row.findViewById(R.id.ListViewEditText);

        row.setTag(holder);
    } else {   
        holder = (ViewHolder) row.getTag();
    }
    final CourseClass course = (CourseClass) getItem(position);
    holder.courseCrn.setText(course.getCourse_crn());
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context, R.layout.support_simple_spinner_dropdown_item, course.getCourse_name());
    holder.courseSpinner.setAdapter(arrayAdapter);
    return row;
}

public class ViewHolder {
    Spinner courseSpinner;
    EditText courseCrn;
}

}

我已经阅读了所有问题和教程,但我仍然无法理解。

你能说明错误的位置,还是能给我一些解决问题的想法?

1 个答案:

答案 0 :(得分:2)

编辑courseCrn后,您没有更新课程对象。 更改getView()课程中的CourseAdapter方法。


@NonNull
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View row = convertView;
    final ViewHolder holder;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(R.layout.list_view_row_layout, null);
        holder = new ViewHolder();
        holder.courseSpinner = (Spinner) row.findViewById(R.id.ListViewSpinner);
        holder.courseCrn = (EditText) row.findViewById(R.id.ListViewEditText);

        row.setTag(holder);
    } else {
        holder = (ViewHolder) row.getTag();
    }
    final CourseClass course = (CourseClass) getItem(position);
    holder.courseCrn.setText(course.getCourse_crn());
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context, R.layout.support_simple_spinner_dropdown_item, course.getCourse_name());
    holder.courseSpinner.setAdapter(arrayAdapter);
    holder.courseCrn.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) {
            course.setCourse_crn(s.toString());
        }
    });
    return row;
}