2017-01-06 6 views
2

私の小さなプロジェクト用のcustomlistadapterを実装しようとしています。私は基本的に、適切なクラスを使用してビューを膨張させるようJavaに依頼します。私が最初にここに持っている:私は彼らがグループ化されずにエラーを達成しないことができなかったので、私はスーパースライド内のすべてのクラスをリストした変数を使用してCustomListAdapterを模倣する方法<objects>

public class slide { 

    public class video { 
     VideoView videoOfTheDay; 

     //Purpose of this constructor 
     public video(VideoView videoOfTheDay) { 
      this.videoOfTheDay = videoOfTheDay; 
     } 

     public VideoView getVideoOfTheDay() { 
      return videoOfTheDay; 
     } 

    } 

    public class blog { 
     ImageView imageOfTheDay; 
     TextView messageOfTheDay; 

     public blog(ImageView imageOfTheDay, TextView messageOfTheDay) { 
      this.imageOfTheDay = imageOfTheDay; 
      this.messageOfTheDay = messageOfTheDay; 
     } 

     public ImageView getImageOfTheDay() { 
      return imageOfTheDay; 
     } 

     public TextView getMessageOfTheDay() { 
      return messageOfTheDay; 
     } 
    } 

    public class advertisement { 
     ImageView ImageViewAd1; 
     ImageView ImageViewAd2; 

     public advertisement(ImageView imageViewAd1, ImageView imageViewAd2) { 
      this.ImageViewAd1 = imageViewAd1; 
      this.ImageViewAd2 = imageViewAd2; 
     } 

     public ImageView getImageViewAd1() { 
      return ImageViewAd1; 
     } 

     public ImageView getImageViewAd2() { 
      return ImageViewAd2; 
     } 
    } 
}` 

。そこから私は要素を取り込むために使用することを自身の中に見て、適切なクラスを決定するためのJavaを頼むことを行った:

class CustomListAdapter extends BaseAdapter { 
     private ArrayList<slide> customVariableDisplay; 
     private LayoutInflater layoutInflater; 

     public CustomListAdapter(Context context, ArrayList<slide>customVariableDisplay) { 
      this.customVariableDisplay = customVariableDisplay; 
      layoutInflater = LayoutInflater.from(context); 
     } 

     public int getCount() { 
      return customVariableDisplay.size(); 
     } 

     public Object getItem(int position) { 
      return customVariableDisplay.get(position); 
     } 

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

     // If the element of the slide is a video -- then the getView will return... 
     if(slide==slide.video){ 
      public View getView (int position, View convertView, ViewGroup parent){ 
      ViewHolder holder; 
      if (convertView == null) { 
       convertView = layoutInflater.inflate(R.layout.act_layout, null); 
       holder = new ViewHolder(); 
       holder.slide.video = (VideoView) convertView.findViewById(R.id.videolayout); 
       } 
      else{ 
       holder = (ViewHolder)convertView.getTag(); 
      } 
       holder.video.setVideoResource(customVariableDisplay.get(position).getVideoOfTheDay()); 
      } 
      return convertView; 
     } 
     // If the element is a 'blog' then --- then the getView will return... 
     else if(slide==slide.blog){ 
      public View getView (int position, View convertView, ViewGroup parent){ 
      ViewHolder holder; 
      if (convertView == null) { 
       convertView = layoutInflater.inflate(R.layout.act_layout, null); 
       holder = new ViewHolder(); 
       holder.slide.blog.message = (TextView) convertView.findViewById(R.id.messageInLayout); 
       holder.slide.blog.image = (ImageView) convertView.findViewById(R.id.imageInLayout); 
       convertView.setTag(holder); 
      } 
      else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
       //Can write to getClass() for either? 
       //Ex: holder.(setImageResource(cVD) || setText(cVD)).getClass ?? 
       holder.image.setImageResource(customVariableDisplay.get(position).getImageofTheDay()); 
       holder.message.setText(customVariableDisplay.get(position).getMessageOfTheDay()); 
      } 
      return convertView; 
     } 
     //Else if the element of the slide is an 'advertisement' then the getView will return... 
     else if (slide==slide.advertisement){ 
      public View getView (int position, View convertView, ViewGroup parent){ 
       ViewHolder holder; 
       if (convertView == null) { 
        convertView = layoutInflater.inflate(R.layout.act_layout, null); 
        holder = new ViewHolder(); 
        holder.slide.advertisement.imagead1 = (ImageView)convertView.findViewById(R.id.imageAdOneInAdvertisementLayout); 
        holder.slide.blog.image = (ImageView)convertView.findViewById(R.id.imageAdTwoInAdvertismentLayout); 
        convertView.setTag(holder); 
       } 
       else { 
        holder = (ViewHolder) convertView.getTag(); 
       } 
       holder.imagead1.setImageResource(customVariableDisplay.get(position).getImageViewAd1()); 
       holder.imagead2.setImageResource(customVariableDisplay.get(position).getImageViewAd2()); 
      } 
      return convertView; 
     } 
     else{ 
      //Throw a final View exception for unprecedented errors!! 
     } 
    } 
}` 

私は何クラス、それはif文の中にあるのJavaを依頼する方法に何で立ち往生しています。 //このスライドがクラスブログで構成されている場合など...何か助けてください!ありがとう!

答えて

0

あなたのアダプタで一つの変数slideTypeを宣言することができますし、onBindViewHolder()であなたのレイアウトを膨らませるアダプタのコンストラクタに渡して、その値に基づいて、onCreateViewHolder()

int slideType; 

public CustomListAdapter(Context context, ArrayList<slide>customVariableDisplay, int slideType) { 
    this.slideType = slideType; 
} 

をしても合格するアダプタに3つの別々の方法を定義しますデータをバインドできるようにリストを作成します。

0

このListViewは、ビデオ、ブログなどが混在して表示されますか?はいの場合は、以下のチェックを使用する必要があります。

if(null != slide.video){ 
    // add code for video 
    } 
else if(null != slide.blog){ 
    // add code for blog 
    } 
else if (null != slide.advertisement){ 
    // add code for advertisement 
    } 

また、あなたがスライドオブジェクトにブログや広告のためにnullを設定する必要があるか、表示したい項目は、ビデオ

である場合には、それらを初期化しません
関連する問題