2015-02-23 5 views
1

У меня проблема с потоком моего приложения.listview onclick listerner дает неправильную позицию строки

У меня есть один ListView в одном из наших фрагментов. Мы создали один пользовательский адаптер для заполнения данных из web-сервиса с помощью JSON. (который расширяет BaseAdapter)

Он имеет другие компоненты, такие как EditText и кнопки, когда я устанавливаю OnClick.

Мы создали OnClickListerner(), который работает правильно для данных. Но я хочу получить следующий элемент в той же строке. Значение позиции задает объект неправильной строки.

Образец кода, который я написал для этого. Пожалуйста, проверьте, не совершил ли я ошибку при звонке. (Я получаю данные правильно из массива, но сам объект приходит не так).

add_to_cart.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       int p = position; 

      Integer pos = (Integer) arg0.getTag(); 
      SKU_CODE = data.get(pos).get("sku_code"); 
      SKU_NAME = data.get(pos).get("sku_name"); 
      sp = PreferenceManager.getDefaultSharedPreferences(activity); 
      LOGGED = sp.getBoolean("LOGGED", false); 
      USER_ID = sp.getString("USER_ID", ""); 
      STORE_CODE = sp.getString("STORE_CODE", "985"); 
      url = "http://foodworld.in/android-api/add_item_to_cart.php"; 
      //Toast.makeText(activity, url, Toast.LENGTH_SHORT).show(); 
      Log.d("add to cart ur: ", url); 
      add_to_cart.setVisibility(View.GONE); 

      //qty_change_row.setTag(pos); 

      qty_change_row.setVisibility(View.VISIBLE); 

      AddItemToShoppingCart newTask = new AddItemToShoppingCart(arg0, pos); 
      newTask.execute(); 

      } 
     }); 

В этом коде есть «add_to_cart_row». Это линейная компоновка с идентификатором, на который мы ссылаемся. Я пытался настроить видимость, но он не работает; он устанавливает для неправильного объекта (объект в другой строке на экране).

На скриншоте прилагается, я нажал на кнопку «Добавить в корзину». Он активировал элемент в последней строке (+ - текстовое поле).

Это была моя проблема. Пожалуйста, помогите мне.

+0

если вы используете 'ListView' то есть 'OnItemClickListener', который предоставляет элемент' position' – Xcihnegn

ответ

0

Прежде всего,

У меня есть сомнения по поводу Integer pos = (Integer) arg0.getTag(); позицию как адаптер getView() возвращает корзину Просмотр поэтому возможно вы получите неправильную позицию данных,

Таким образом, вместо этого вы можете использовать int p = position;

Как ,

int p = position; 
SKU_CODE = data.get(p).get("sku_code"); 
SKU_NAME = data.get(p).get("sku_name"); 

Второе использование если - еще для add_to_cart Видимость ,

Мол,

if(//Some condition) 
{ 
    add_to_cart.setVisibility(View.GONE); 
    qty_change_row.setVisibility(View.VISIBLE); 
} 
else 
{ 
add_to_cart.setVisibility(View.VISIBLE); 
qty_change_row.setVisibility(View.GONE); 
} 
0

Заменить OnClick с setOnItemClickListener.

Пример:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       ... 
      } 
     }); 

Вы можете получить значение или положение из ListView на этом пути:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      QuestionItem questionItem = (QuestionItem)parent.getItemAtPosition(position); 

      if(questionItem.id == 1){ 
       //do something 
      } 
      if(position == 2){ 
      // do something 
      } 
      } 
    }); 

QuestionItem является объектом для ListAdapter:

private class QuestionItem{ 
     private int id; 

     public QuestionItem(int id){ 
      this.id = id; 
     } 
    } 
Смежные вопросы