簡體   English   中英

Android-使用自定義列表視圖適配器編輯文本和微調器

[英]Android - Edit Text and Spinner with custom listview adapter

我遇到了一個問題,成千上萬的人都在stackoverflow中遇到問題,我很難再問一遍,但是我閱讀了所有問題並嘗試針對我的情況實施,但這些問題均無濟於事,或者我可能錯誤地實施了它們。

這是我的問題。 我有一個具有一個微調器和edittext的自定義listview。 我動態創建行。 眾所周知,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;
}

}

我已經閱讀了所有問題和教程,但仍然不明白。

您可以顯示錯誤在哪里,或者可以給我一些解決問題的想法嗎?

編輯courseCrn之后,您不會更新課程對象。 CourseAdapter類中更改您的getView()方法。


@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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM