2016-07-12 3 views
0

У меня есть приложение в android, которое позволяет вам управлять своими школьными классами. Это всего лишь проект для изучения, поэтому ничего серьезного.Android - Получить представление (EditText) по ID из ListView или ArrayAdapter

Теперь, если вы откроете детали из темы, вы сможете увидеть ее и отредактировать. Если вы затем нажмете на сохранение, я должен проверить, что что-то изменилось или что-то новое было добавлено.
Теперь моя проблема в том, что я не понимаю, как я могу получить конкретное представление из ArrayAdapter или из ListView, потому что каждое из этих полей класса генерируется ArrayAdapter, и я должен проверить их все на наличие изменений.

Так что у меня ArrayAdapter, который заполняет ListView со следующими элементами (list_grades_prefab.xml):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="10pt" 
    android:weightSum="2" 
    android:orientation="horizontal"> 

    <EditText 
     android:id="@+id/grade_field" 
     android:textSize="10pt" 
     android:textAlignment="center" 
     android:layout_weight="1" 
     android:layout_marginRight="10pt" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <EditText 
     android:id="@+id/weight_field" 
     android:textSize="10pt" 
     android:textAlignment="center" 
     android:layout_weight="0.7" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:layout_weight="0.3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="10pt" 
     android:textStyle="bold" 
     android:text="%"/> 

</LinearLayout> 

Херес GetView из ArrayAdapter:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder viewHolder = new ViewHolder(); 

     if(convertView == null){ 
      LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.list_grades_prefab, null); 
      viewHolder.GradeField = (EditText) convertView.findViewById(R.id.grade_field); 
      viewHolder.WeightField = (EditText)convertView.findViewById(R.id.weight_field); 

      convertView.setTag(viewHolder); 
     }else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
     viewHolder.GradeField.setText(String.valueOf(Grades.get(position)[0])); 
     viewHolder.GradeField.setTextColor(BasicFunctions.colorFromGrade(Grades.get(position)[0])); 
     viewHolder.WeightField.setText(String.valueOf(Grades.get(position)[1]).split("\\.")[0]); 

     return convertView; 
    } 

Он просто заполняет различные EditText просмотров с текстом.

Здесь я установить ArrayAdapter (GradesAdapter):

ListView gradeListView = (ListView)findViewById(R.id.grade_list_view); 
GradesAdapter gradesAdapter = new GradesAdapter(this, R.layout.list_grades_prefab, grades); 
gradeListView.setAdapter(gradesAdapter); 

grade_list_view является ListView и сортов является типом двумерный массив дважды.

Как мне получить каждый EditText с id grade_field из ArrayAdapter, когда я не внутри метода getView?

+0

Где вы хотите получить доступ к значению EditText? –

+0

От слушателя ImageButton в методе onCreate активности – Velrest

ответ

3

После того, как пользователь отредактирует данные, вызовите notifyDataSetChanged на свой адаптер. Поскольку вы используете ListView вместо RecyclerView, это ваш единственный способ сообщить представлениям, что что-то изменилось.

+0

И как мне получить значения из адаптера после этого? – Velrest

+0

Значения находятся в массиве Grades, откуда их получает адаптер. –

+0

да. поэтому ArrayAdapter обновляет массив с notifyDataSetChanged? – Velrest

Смежные вопросы