ListView Дублирует Android



Когда я получаю результат поиска из своей таблицы, результаты отображаются дважды.



Дублирование Результатов



Результаты "a / a", "aa / aa" и "ab / a" все правильные и должны быть там. Однако я не хочу, чтобы повторяющиеся значения в третьей записи listview.



Любые идеи, почему это происходит?



Главный Экран



// Set up search array
for(int i = 0; i < isbn.length; i++)
{
searchArray.add(new InventoryItem(isbn[i], InventoryAdapter.getTitleAndAuthorByISBN(isbn[i])));
}
Toast.makeText(getApplicationContext(), "searchArray.size()="+searchArray.size(), Toast.LENGTH_LONG).show();

// add data in custom adapter
adapter = new CustomAdapter(this, R.layout.list, searchArray);
ListView dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(adapter);


CustomAdapter



public class CustomAdapter extends ArrayAdapter<InventoryItem> {
Context context;
int layoutResourceId;
LinearLayout linearMain;
ArrayList<InventoryItem> data = new ArrayList<InventoryItem>();

public CustomAdapter(Context context, int layoutResourceId,
ArrayList<InventoryItem> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}

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

if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
linearMain = (LinearLayout) row.findViewById(R.id.lineraMain);
}

InventoryItem myItem = data.get(position);
TextView label = new TextView(context);
label.setText(myItem.details);
linearMain.addView(label);

return row;

}
}
528   2  

2 ответов:

Ну, проблема в вашем методе getView(int position, View convertView, ViewGroup parent), потому что вы продолжаете добавлять представления к ранее переработанному представлению, которое предоставляет вам listview. Вместо динамического создания текстового представления его следует раздувать при создании представления.

Например, чтобы исправить это:

    @Override
       public View getView(int position, View convertView, ViewGroup parent) {
           View row = null;

          if (convertView == null) {
                 LayoutInflater inflater = ((Activity) context).getLayoutInflater();
                 row = inflater.inflate(layoutResourceId, parent, false);
                 //Make sure the textview exists in this xml
          } else {
                 row = convertView;
          }

          InventoryItem myItem = data.get(position);
          TextView label = (Textview) row.findViewById(R.id.YOU_TEXT_VIEW_ID);
          label.setText(myItem.details);

          return row;

   }

Вид повторно используется адаптером. Поэтому, когда вы звоните

linearMain.addView(label);

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

Действительно ли вам нужно каждый раз создавать новый TextView и добавлять его в свой список? Я бы изменил это, чтобы просто установить текст на одном существующем TextView.

Comments

    Ничего не найдено.