2017-02-10 12 views
0

У меня проблема, с которой сталкивались тысячи людей в stackoverflow, и мне плохо, когда я снова спрашивал, но я прочитал все вопросы и попытался реализовать свое дело, и никто из них не работал или, возможно, я внедрил их неправильно.Android - Редактирование текста и Spinner с помощью пользовательского адаптера listview

Вот мой вопрос. У меня есть собственный список, в котором есть один spinner и edittext. Я динамически создаю строки. Как вы все знаете, edittext messes up, при прокрутке, так что я реализовал, шаблон держателя вида для плавной прокрутки, но все же мой список не может отображаться должным образом. При прокрутке тексты по-прежнему дублируются. Я также пытаюсь сохранить ввод пользователя в другом классе, потому что у меня есть spinner и edittext вместе. Мой ListView строки раскладка:

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

} 

Я уже прочитал все вопросы и учебные пособия, но я пока не могу понять.

Можете ли вы показать, где ошибка или вы можете дать мне некоторые идеи для решения моей проблемы?

+0

chnages: строка = inflater.inflate (R.layout.list_view_row_layout, родитель, ложь); теперь make viewholder class static –

+0

Использование обзора для повторного использования будет лучшим вариантом –

+0

Спасибо @Divyesh, но теперь он не дублирует значения, но теперь он полностью удаляется, когда edittext отключается от экрана. Можете ли вы догадаться, почему это происходит? – Alperen

ответ

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; 
} 
+0

Спасибо, что я добавил это сейчас, но он по-прежнему удаляет поле, когда оно исчезает с экрана. Остается та же проблема. Вы знаете, почему это может быть? – Alperen

+0

@Alperen, пожалуйста, проверьте этот код на github. Вот ссылка на проект github [link] https://github.com/SanjayKushwah0601/SpinnerWithEditText –

+0

мой код точно такой же, что вы даете, но я пишу что-то в edittext, когда прокручиваю его вниз. Не работает, но спасибо за ваш help.I ценю, что – Alperen