2016-11-10 20 views
1

ウェブサービスから取得したリストの項目を表示するこのアダプタを持っています。スクロールすると最初の位置のレイアウトが膨張しています。あなたがgetViewTypeCountgetItemViewTypeは、2つの異なるconvertView Sを取得するためにオーバーライドする必要がベースアダプタのスクロール位置

private class hwListArrayAdapter extends BaseAdapter { 


    private ArrayList<HomeWork> Items; 
    private final Activity context; 

    public hwListArrayAdapter(Activity context, ArrayList<HomeWork> items) { 

     this.context = context; 
     this.Items = items; 
    } 

    @Override 
    public int getCount() { 
     return Items.size() + 1; 
    } 

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

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

    @Override 
    public View getView(int position, View view, ViewGroup viewGroup) { 
     View v = view; 
     TextView desc, date, course; 
     if (position == 0) { 

      LayoutInflater vi; 
      vi = LayoutInflater.from(context); 
      v = vi.inflate(R.layout.homework_list_top, null); 

      AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, (int) (MyApplication.screenHeight * 0.05)); 
      v.setLayoutParams(params); 
     } else { 
      if (v == null) { 
       LayoutInflater vi; 
       vi = LayoutInflater.from(context); 
       v = vi.inflate(R.layout.homework_list_item, null); 
      } 
      AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, (int) (MyApplication.screenHeight * 0.6)/8); 
      v.setLayoutParams(params); 


      desc = (TextView) v.findViewById(R.id.descriptionHW); 
      desc.setTypeface(MyApplication.dinar); 
      desc.setText(Items.get(position - 1).getDetails()); 

      course = (TextView) v.findViewById(R.id.courseHW); 
      course.setTypeface(MyApplication.dinar); 
      course.setText(Items.get(position - 1).getCourseName()); 

      date = (TextView) v.findViewById(R.id.dateHW); 
      date.setTypeface(MyApplication.dinar); 
      date.setText(dateConverter(Items.get(position - 1).getDueDate())); 


     } 
     return v; 
    } 
} 

答えて

2

は、ここに私のアダプタです。例えば。

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

@Override 
public int getItemViewType(int position) { 
    return position == 0 ? 0 : 1; 
} 

getViewTypeCountあなたは2つの行の異なるタイプを処理したいと言っている、とgetItemViewTypeは実際の型を返します。戻り値の型がgetItemViewTypeであることは、Viewの配列に対処するためにandroidで内部的に使用されるので、常に0getViewTypeCount() -1

+1

の間の値を返すようにしてください。if(getItemViewType(position)== 0) ?? –

+0

することができますが、この場合は大きな違いはありません。しかし、はい、一般的なルールとして、あなたはそうするべきです – Blackbelt

関連する問題