何千人もの人がスタックオーバーフローで抱いていた問題があります。私は再び質問するのが悪いと感じますが、すべての質問を読み、自分のケースに実装しようとしましたが、おそらく私はそれらを間違って実装しました。Android - カスタムリストビューアアダプターでテキストとスピナーを編集
ここは私の質問です。私は1つのスピナーとedittextを持っているカスタムリストビューを持っています。動的に行を作成します。あなたが知っているように、edittextがうまくいけば、スクロールするとスムーズにスクロールするためのビューホルダーのパターンが表示されますが、リストビューは正しく表示されません。編集テキストは、スクロールするとそれ自体が複製されます。私はスピンナーと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;
}
}
私はすでにすべての質問とチュートリアルを読みましたが、私はまだ分かりません。
エラーの原因を表示したり、問題を解決するためのアイデアを教えていただけますか?
chnages:行= inflater.inflate(R.layout.list_view_row_layout、親、偽)。今はviewholderクラスを静的にします –
リサイクラビューを使うのがより良いオプションになります –
ありがとう@Divyeshしかし、今は値を複製しませんが、今度はedittextがscreen.Canを外すと完全に削除されます。 @ RanjanK.M。 – Alperen