java - Android - Java如何检查调用了哪个类构造函数

标签 java android

我有以下类,我用它来幻灯片放映图像,并使用 sliderAdapter 构造函数并传递字符串列表,它的工作很好。

public class sliderAdapter extends PagerAdapter {



    private Context context;

    private List<String> URLs = new ArrayList<>();
    sliderAdapter(Context context, List<String> URLs){
        this.URLs = URLs;
        this.context = context;
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view== object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.slideshow_layout,container,false);
        ImageView img = view.findViewById(R.id.imageview);
        Glide.with(context).load(URLs.get(position)).into(img);



        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout)object);
    }

}

现在我需要通过添加从可绘制文件夹加载图像的功能来改进我的 slider ,因此我必须传递整数列表,我不知 Prop 体的方法

据我认为我应该创建接受整数列表的新构造函数 但是所有其他函数呢,我应该如何更改我的类才能与两个构造函数一起正常工作?

任何想法将不胜感激

最佳答案

你可以这样做:

public class Item{
   String url;
   int id;
   boolean link = false;
   boolean resource = false;
   public Item(int id){
       this.id = id;
       resource = true;
   }
   public Item(String url){
       this.url = url;
       link = true;
   }
   public boolean isLink(){
       return link;
   }
   public boolean isResource(){
       return resource;
   }
   public int getId(){
       return id;
   }
   public String getUrl(){
       return url;
   }
}



public class sliderAdapter extends PagerAdapter {

    private Context context;

    private List<Item> items = new ArrayList<>();
    sliderAdapter(Context context, List<Item> items){
        this.items = items;
        this.context = context;
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view== object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.slideshow_layout,container,false);
        ImageView img = view.findViewById(R.id.imageview);
        Item item = items.get(position);
        if(item.isLink()){
            Glide.with(context).load(item.getUrl()).into(img);
        }else{
            img.setImageResource(item.getId());
        }

        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout)object);
    }
}

在此示例中,我没有将两个不同的列表传递给适配器( List<String>List<Integer> ),而是将其更改为接受 Item 列表对象。如您所见,Item对象可以保存 URL 或可绘制资源 ID。在适配器中,我检查每个项目以查看它是什么类型,以便我可以使用适当的方法来设置 ImageView的图像。

关于java - Android - Java如何检查调用了哪个类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48347476/

相关文章:

android - 插件 [id : 'gradle.plugin.com.onesignal.onesignal-gradle-plugin' ] was not found

java - Spring Cloud Stream发送到Kafka错误控制处理

java - 使用外部库将项目部署到 glassfish 后出现 NoClassDefFoundError

java - Apache kafka 与 AVRO,模式 id 在消息中的哪里?

java - Android 线程阻塞 UI 除非使用同步

java - 上传文件时出现致命异常错误,但文件仍然可以正常上传

Java:从 UTF8 字符串创建 Drawable

android - 在 Activity 之间从下到上滑动动画

java - 以编程方式禁用在 Intranet 中运行并呈现 .xhtml 页面的站点的 IE-8 兼容模式

java - Maven 在 jar 中打包项目中的存储库依赖项