2016-03-18 1 views
0

Ниже мой метод Adapter,Get вид называется несколько раз

 public class StatusAdapter extends BaseAdapter { 

    private Context mContext; 
    private View view; 
    private ViewHolder mViewHolder; 
    private LayoutInflater layoutInflater; 
    private ArrayList<ShipmentMasterDao> listForView; 

    public StatusAdapter(Context mContext, ArrayList list) { 
     super(); 
     mContext = mContext; 
     listForView = list; 
     layoutInflater = LayoutInflater.from(mContext); 
    } 


    @Override 
    public int getCount() { 
     return listForView.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return listForView.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 2; 
    } 

    //Viewholder class to contain inflated xml views 
    private class ViewHolder { 
     private TextView mstatus, mDate; 
     private ImageView image; 
    } 

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

     if (convertView == null || mViewHolder != null) { 
      //inflate the view for each row of listview 
      view = layoutInflater.inflate(R.layout.status_progress, null); 
      //ViewHolder object to contain myadapter.xml elements 
      mViewHolder = new ViewHolder(); 
      mViewHolder.image = (ImageView) view.findViewById(R.id.progressIcon); 
      mViewHolder.mDate = (TextView) view.findViewById(R.id.date); 
      mViewHolder.mstatus = (TextView) view.findViewById(R.id.status); 
      view.setTag(mViewHolder); 

     } else { 
      mViewHolder = (ViewHolder) view.getTag(); 

     } 
     ShipmentMasterDao item = (ShipmentMasterDao) listForView.get(position); 

     mViewHolder.mstatus.setText(item.getStatus()); 
     mViewHolder.mDate.setText(item.get_date()); 
     mViewHolder.mDate.setVisibility(View.VISIBLE); 

     return view; 
    } 
} 

в методе onViewCreated, Im установка адаптера следующим образом,

adapter = new StatusAdapter(getActivity().getApplicationContext(), masterItems); 
mListView.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 

Проблема заключается в том, что GetView вызывается несколько раз. Как я могу это решить? Есть ли какие-либо способы, как я могу сбросить мой ui, прежде чем добавлять новые элементы? потому что с GetView вызываются несколько раз, пользовательский интерфейс обновляются с одинаковыми значениями в несколько раз,

+1

Пожалуйста, вставьте полный адаптер, проблема не на GetView() , а счетчик результатов getView() основан на подсчете количества предметов. –

+0

Я опубликовал обновленный код –

+1

getView вызывается столько раз, сколько ему нужно, в чем проблема, с которой вы сталкиваетесь? – tyczj

ответ

1

Посмотрите в вашем коде:

@Override 
public int getCount() { 
    return listForView.size(); 
} 

GetView() итерация на основе размера вашего списка. Если вы хотите итерации всего один раз, установите статическое целое число.

@Override 
public int getCount() { 
    return 1; // Just one getView() iteration 
} 

НО ЭТО НЕ ЛУЧШАЯ ПРАКТИКА ДЛЯ АДАПТЕРАМИ

Метод GetView() не является родительской итерации. Это ИЗДЕЛИЯ из вашего списка, с помощью которого вы создаете представления для каждого элемента в списке.

1

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

метод (example)