2017-01-06 2 views
2

zu imitieren Ich versuche, einen Customlistadapter für ein kleines Projekt von mir zu implementieren. Ich möchte grundsätzlich fragen, ob Java die entsprechende Klasse verwendet, um die Ansicht aufzublasen. Ich habe hier zuerst:Wie CustomListAdapter mit Variable <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; 
     } 
    } 
}` 

Ich habe innerhalb einer Superrutsche alle Klassen aufgeführt, weil ich nicht in der Lage war, keine Fehler zu erreichen, ohne sie gruppiert werden. Von dort ging ich Java zu fragen, in sich selbst zu suchen und die entsprechende Klasse bestimmen zu verwenden, um das Element zu füllen:

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!! 
     } 
    } 
}` 

ich stecken bin mit dem, was auf eine Art und Weise Java zu fragen, was Klasse ist es in der if-Anweisungen. // Wenn diese Folie den Klassenblog enthält ... usw. JEDE HILFE BEWUSST! VIELEN DANK!

Antwort

0

Sie können eine Variable slidetype in Ihrem Adapter erklären und übergeben es an Ihrem Adapter Konstruktor und basierend auf diesem Wert aufblasen Ihr Layout in onBindViewHolder(), onCreateViewHolder()

int slideType; 

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

und auch drei separate Verfahren in Ihrem Adapter definieren passieren Ihre Liste, damit Sie Ihre Daten binden können.

0

Zeigt dies ListView zeigen eine Mischung aus Video, Blog etc .. wenn ja, dann müssen Sie unter Überprüfung verwenden.

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 
    } 

Darüber hinaus müssen Sie für Blog und Werbung in Folie-Objekt null setzen oder Sie initialisieren sie nicht, falls das Element, das Sie anzeigen möchten Video ist

Verwandte Themen