Android 自定义接口

简介: 前提1、各位看官大家好,小可今天又来装,啊呸,又来写干货来了。在自定义Android接口之前先要搞清楚什么是接口2、接口定义大家都知道Android是基于Java语言开发的,嗯,之前是,当然现在也有Kotin,今天主要讲解Java方面。

前提

1、各位看官大家好,小可今天又来装,啊呸,又来写干货来了。在自定义Android接口之前先要搞清楚什么是接口
2、接口定义

  • 大家都知道Android是基于Java语言开发的,嗯,之前是,当然现在也有Kotin,今天主要讲解Java方面。
  • 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
  • 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
  • 接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
    3、实现方法
  • 相信上面对接口的说明大家都可以理解,但是,自定义接口又是什么样子的呢,相信还是比较抽象的,所以今天就小可就在此举一个例子来介绍一下

首先

  • 先分析一下,我们今天要自定义的接口要有什么诉求(即要实现什么功能)自定义接口是为了更好的传递我们想要传递的值。
  • 大家都知道Recyclerview没有自带点击事件,今天就以Recyclerview的点击事件为例,来介绍一下自定义接口
  • 定义一个接口类
  public interface OnItemClickListener {
    //第一个参数是适配器的item,第二个参数是位置
    - 短按事件
   void OnItemClick(View view,int position);
      长按事件
   void OnItemLongClick(View view,int position);
 }

其次

  • 要实现Recyclerview的点击事件,当然要定义一个适配器了
  public class CustomAdapter extends RecyclerView.Adapter
    <CustomAdapter.CustomViewHolder> {

   private List<CustomBean> mList;
   private Context mContext;
   private LayoutInflater mInflater;
   private OnItemClickListener mOnItemClickListener;

public CustomAdapter(List<CustomBean> mList, Context context) {
    this.mList = mList;
    this.mContext = context;
    this.mInflater = LayoutInflater.from(mContext);
}

@Override
public CustomViewHolder onCreateViewHolder(ViewGroup 
parent, int viewType) {
    View view = mInflater.inflate(R.layout.item_custom_layout, 
parent, false);
    CustomViewHolder viewHolder = new CustomViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder( CustomViewHolder holder, int position) {
    holder.mTxtItemTitle.setText(mList.get(position).getTitle());
    holder.mTxtItemContent.setText(mList.get(position).getContent());
    //设置点击事件
   setUIEvent(holder);
}

@Override
public int getItemCount() {
    return mList==null?0:mList.size();
}

class CustomViewHolder extends RecyclerView.ViewHolder {

    TextView mTxtItemTitle, mTxtItemContent;

    public CustomViewHolder(View itemView) {
        super(itemView);
        mTxtItemTitle = itemView.findViewById(R.id.txt_item_title);
        mTxtItemContent = itemView.findViewById(R.id.txt_item_content);
    }
}

/**
 * 设置点击事件
 * @param holder
 */
public void setUIEvent(final CustomViewHolder holder){
    //点击事假,首先判断是否为空,不为空的时候再进行操作
    if (mOnItemClickListener != null) {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int layoutPosition = holder.getLayoutPosition();
                mOnItemClickListener.OnItemClick(holder.itemView, layoutPosition);
            }
        });
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                int layoutPosition = holder.getLayoutPosition();
                mOnItemClickListener.OnItemLongClick(holder.itemView, layoutPosition);
                return false;
            }
        });
    }
}

/**
 * 提供给Activity或者Fragment调用的
 *
 * @param onItemClickListener
 */
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
    this.mOnItemClickListener = onItemClickListener;
}
 }

在适配器里面对接口的调用已经很清晰明了了,相信各位看官已经看懂了吧。

再次

  • 当然,现在就是在Activity里面怎么实现接口回调了

    public class ThirdActivity extends BaseActivity implements 
     OnItemClickListener{
    
     RecyclerView mRecyclerView;
     List<CustomBean>mList=new ArrayList<>();
     CustomAdapter mAdapter;
    
    @Override
    public void setContentView() {
      setContentView(R.layout.activity_third);
    }
    
    @Override
    public void initView() {
      mRecyclerView = $(R.id.recyclerView);
      mRecyclerView.setLayoutManager(new 
    LinearLayoutManager(this));
      mAdapter= new CustomAdapter(mList,this);
      mAdapter.setOnItemClickListener(this);
      mRecyclerView.setAdapter(mAdapter);
      
     }
    
     @Override
    public void initData() {
    
      }
    
    @Override
     public void initClick(View view) {
    
     }
    
    @Override
    public void setListener() {
    
    }
    
    @Override
    public void OnItemClick(View view, int position) {
      ToastUtils.showMessage(this,getResources().getString(R.string.click_item));
    }
    
    @Override
    public void OnItemLongClick(View view, int position) {
    
    }
    }
    
  • 到此,自定义接口形成了一个圆满的回调,当然还有其他回调写法,再举一个例子讲解一下。依然是在适配器中实现

img_0d9fb0a09aa00c600015ab9851186b7b.png
适配器图.png
  • 来看图,这个就是上面实现的适配器图片,然后我们想对内容这个字段加上点击事件该怎么做呢?相信聪明如你的看官已经想到了。即对内容这个TextView加上点击事件即可,话不多说上代码:

    /**
      * 点击内容的接口
      */
    public interface OnItemContentClickListener{
     //点击事件
      void OnContentClick(int position);
      //长按事件
      void OnContentLongClick(int position);
    }
    
  • 由上面的接口可以看到此接口主要实现了点击内容区域获取内容对应的位置的数据(然后实现跳转功能即可)

    /**
     * 点击内容那个TextView对应的调用
     * @param onContentListener
     */
      public void setOnContentListener(OnItemContentClickListener 
    onContentListener){
     this.mOnItemContentClickListener=onContentListener;
    }
    
  • 最后在Activity中进行调用了

     mAdapter.setOnContentListener(new 
    CustomAdapter.OnItemContentClickListener() {
          @Override
          public void OnContentClick(int position) {
              ToastUtils.showMessage(ThirdActivity.this,
                      getResources().getString(R.string.click_item_content));
          }
    
          @Override
          public void OnContentLongClick(int position) {
    
          }
      });
    
  • 可以看到这里是采用匿名内部来的方式来实现的,这样写可以更直观一点,但是看着比较乱一点(仁者见仁,智者见智)

最后

  • 当然,自定义接口还有很多写法,还需要大家去探索,我这里只是抛砖引玉。
  • 针对自定义接口今天就讲到这里,希望对大家有所帮助,如果有哪里讲的不到位的地方,还请大家见谅,并且告诉我一声,谢谢。
相关文章
|
22天前
|
缓存 前端开发 Android开发
安卓开发中的自定义视图:从零到英雄
【10月更文挑战第42天】 在安卓的世界里,自定义视图是一块画布,让开发者能够绘制出独一无二的界面体验。本文将带你走进自定义视图的大门,通过深入浅出的方式,让你从零基础到能够独立设计并实现复杂的自定义组件。我们将探索自定义视图的核心概念、实现步骤,以及如何优化你的视图以提高性能和兼容性。准备好了吗?让我们开始这段创造性的旅程吧!
22 1
|
2月前
|
Android开发 开发者
安卓应用开发中的自定义视图
【9月更文挑战第37天】在安卓开发的海洋中,自定义视图犹如一座座小岛,等待着勇敢的探索者去发现其独特之处。本文将带领你踏上这段旅程,从浅滩走向深海,逐步揭开自定义视图的神秘面纱。
42 3
|
4月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
84 2
基于Android P,自定义Android开机动画的方法
|
2月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
93 0
|
4月前
|
供应链 物联网 区块链
未来触手可及:探索新兴技术的趋势与应用安卓开发中的自定义视图:从基础到进阶
【8月更文挑战第30天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的可能性。
|
4月前
|
测试技术 Android开发 Python
探索软件测试的艺术:从基础到高级安卓应用开发中的自定义视图
【8月更文挑战第29天】在软件开发的世界中,测试是不可或缺的一环。它如同艺术一般,需要精细的技巧和深厚的知识。本文旨在通过浅显易懂的语言,引领读者从软件测试的基础出发,逐步深入到更复杂的测试策略和工具的使用,最终达到能够独立进行高效测试的水平。我们将一起探索如何通过不同的测试方法来确保软件的质量和性能,就像艺术家通过不同的色彩和笔触来完成一幅画作一样。
|
1月前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
1月前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
33 5
|
2月前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。
|
3月前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
67 10