![](/img/trans.png)
[英]How to get specific button and edit its text from a row in custom adapter belonging to ListView in 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.