2015-10-21 4 views
0

Скажите, что у меня есть список массивов, называемый listitem, который обновляется каждый раз, когда нажимается GridView. Он получает элемент GridView, который был нажат, и добавляет его в список массивов, который также используется в качестве базового массива для адаптера ListView. Это работает отлично, но вместо того, чтобы добавлять те же строки в ListView, я хочу отобразить сообщение, например, item_clicked (2), когда его дважды щелкнули, и, если его щелкнуть снова, отобразите item_clicked (3) и так далее.Проверка массива, если значение существует, если существует, добавьте 1 в строку

Я попытался подойти к этому с этим кодом:

public void addItems(int position) { 
    if (listItems.contains(value.get(position))) { 
     int index = listItems.indexOf(value.get(position)); 
     listItems.set(index,value.get(position)); <- here 
    } else { 
     listItems.add(value.get(position)); 
     adapter.notifyDataSetChanged(); 
    } 
} 

position является индекс GridView и values представляет собой массив значений GridView.

Это мой GridView код:

 int index = 0; 
     while (rs.next()) { 
      value.add("ID :" + rs.getString(1) + " Nombre:" + rs.getString(3)); 
      list2.add(values.get(index)); 
      index++; 
      Log.w("query result: ", rs.getString(1)); 
     } 
     ArrayAdapter adapter = new ArrayAdapter(papeleta_act.this, R.layout.list_item, list2); 
     grid.setAdapter(adapter); 
     grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 

       addItems(position); 

      } 
     }); 
    } catch (Exception e) { 
     Log.w("My error;", e); 
    } 
} 

Я был бы признателен за любую идею о том, как подойти к этому вероят. Спасибо заранее!

ответ

0

Для простоты предположим, что все элементы в GridView имеют один тип и назовем его A. В этом случае ArrayList содержит предметы типа A.

AA Простое решение будет состоять в том, чтобы иметь listitem объекты, которые обертывают A, а также имеют счетчик на время, нажав. Возможная реализация:

public class B { 
    public A mA; 
    public int times_clicked; 
} 

Как показывают раз кликали в ListView зависит от реализации вашего макета. Поведение ArrayAdapter по умолчанию состоит в том, чтобы проверить, является ли корневой элемент макета, который он был предоставлен, TextView, а затем установить его текст в результате функции toString() объекта, который он показывает, поэтому вы можете добавить этот метод в класс B:

public String toString(){ 
    if(times_clicked == 1 && A != null) 
     return A.toString(); 
    else 
     return "item_clicked ("+times_clicked+")"; 
} 
+0

хорошо, плохо попробуйте один вопрос. wouldnt этот триггер для всех элементов, которые будут добавлены в список? – ivan

+0

Да, я немного его отредактировал. Но в целом это общее направление того, что вы должны делать. вы все равно можете показать 'A.String()', даже если элемент был нажат более одного раза. Возможно, вы также захотите отойти от поведения по умолчанию в конце концов, что объясняется в http://stackoverflow.com/questions/2265661/how-to-use-arrayadaptermyclass – CurlyCorvus

+0

неплохо попытаться реализовать это, а не сегодня, у меня есть некоторые вещи, чтобы сделать и завершить, но больно, чтобы вы знали, что произошло завтра – ivan