Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android的ListView和RecyclerView的基本用法

Android的ListView和RecyclerView的基本用法

作者头像
指点
发布于 2019-01-18 09:22:23
发布于 2019-01-18 09:22:23
1.2K00
代码可运行
举报
文章被收录于专栏:指点的专栏指点的专栏
运行总次数:0
代码可运行

Android 5.0 版本之前,为了方便的显示多行数据,形如QQ聊天信息主界面,最常用的选择无非是ListView控件,但是ListView控件本身就有很大的局限性和效率问题(相对于RecyclerView控件)来说,比如说ListView只能竖向滚动显示数据,不能横向滚动显示数据,在一些特殊的需求中,ListView就无能为力了。在Android5.0版本之后,Android官方推出了一个新的控件:RecyclerView ,完全解耦的设计使得RecyclerView比起ListView灵活了太多,应用的场合也非常广泛。那么,就来看一下ListView和RecyclerView的用法和不同之处在哪:

首先我们先来看一下ListView控件的简单用法,比如说我们现在要显示这样一个界面:

每一行项目是一个ImageView和TextView控件的组合。

新建一个 Android 工程: activity_main.xml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    tools:context="com.example.administrator.listviewandrecycleview.MainActivity">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>


</LinearLayout>

在主布局文件中,我们添加了一个ListView控件,用于接下来的数据显示,之后我们要新建一个布局文件用于显示ListView中的项目数据 color_item.xml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/colorImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/colorNameTextView"
        android:layout_marginLeft="10dp"
        android:textSize="40sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

布局采用线性横向布局,文件中有两个控件ImageView、TextView。分别用于显示颜色和文字,有了控件,那么对应储存信息的类就有眉目了,新建一个类Color.java:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Color {

    private String colorName;
    private int imageId;

    public Color(String colorName, int imageId) {
        this.colorName = colorName;
        this.imageId = imageId;
    }

    public String getColorName () {
        return colorName;
    }

    public int getImageId() {
        return imageId;
    }


}

一个简单的类,储存的信息对应于我们前面布局文件中显示的信息。

ListView是需要适配器才能显示我们定义的布局文件的,那么我们接下来要为ListView设定一个适配器。这里采用ArrayAdapter作为基类适配器,我们新建一个类ColorAdapter来继承ArrayAdapter,并且加入我们自己的逻辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.administrator.listviewandrecycleview.R;

import java.util.List;

import javax.crypto.spec.PSource;

/**
 * Created by Administrator on 2017/2/21.
 * 自定义适配器类继承于 ArrayAdapter 类来实现 ListView 控件的数据显示,
 * ListView 控件只有设置了适配器才能显示数据
 */

public class ColorAdapter extends ArrayAdapter {

    private int itemLayoutId;

    public ColorAdapter(Context context, int itemLayoutId, List<Color> objects) {
        super(context, itemLayoutId, objects);
        this.itemLayoutId = itemLayoutId;
    }

    /*
     * getView方法用于返回ListView中的item 的视图
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Color color = (Color) getItem(position);
        View view;
        /*
         * convertView 参数用于储存之前加载好的布局缓存,如果不为空,那么我们可以直接用这个用来给view赋值
         * 提高ListView的运行效率
         */
        if(convertView != null) {
            view = convertView;
        }else {
            /*
             * 加载自定义的布局文件,这个方法用于加载布局文件,并且返回一个 View 对象。
             * 这样我们就能够在代码中使用布局文件中的各个属性。
             * 这里的 inflate 方法的三个参数分别代表:
             * 要加载的布局文件Id、为加载的布局文件外层再加一层父布局、第三个参数如果为 true 的话就是把加载的 View 加入父布局中作为子控件。否则就是只在父布局中声明,不添加进入父布局
             * 这里我们当然不能加入父布局,因为我们的 View 是要加入 ListView 中作为子控件的
             */
            view = LayoutInflater.from(getContext()).inflate(itemLayoutId, parent, false);
        }
        // 获取布局文件中的控件id并且显示对应信息:
        ImageView imageView = (ImageView) view.findViewById(R.id.colorImageView);
        TextView textView = (TextView) view.findViewById(R.id.colorNameTextView);
        imageView.setImageResource(color.getImageId());
        textView.setText(color.getColorName());
        return view;
    }
}

在ColorAdapter.java中,我们重写了ArrayAdapter类中的getView方法返回的View作为ListView中的item视图。ok,最后是MainActivity.java:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.ListViewCompat;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import listview.Color;
import listview.ColorAdapter;

public class MainActivity extends AppCompatActivity {

    private String colorName[] = new String[]{
            "blue", "colors", "green", "pink", "puple", "yellow"};
    private int colorId[];
    private static final int colorSum = 6;
    List<Color> list = new ArrayList<Color>();
    private ColorAdapter colorAdapter = null;
    private ListView listView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initAdapter();
        listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(colorAdapter); // 为listView设置适配器

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { // 设置ListView的点击响应事件
            /*
             * listView的点击事件:第一个参数是item所在的适配器引用,
             * 第二个参数是点击的item的View对象,在这里这个View包含了一个ImageView和一个TextView
             * (布局文件color_item布局文件中的控件)
             * 第三个和第四个参数一般是一样的,代表你点击的item在ListView中的位置
             */
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Color color = (Color) list.get(position); // 获取点击的View 中包含的Color 对象
                Toast.makeText(MainActivity.this, "颜色名称:" + color.getColorName(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    protected void initAdapter() {
        colorAdapter = new ColorAdapter(this, R.layout.color_item, list);

        colorId = new int[]{R.mipmap.blue, R.mipmap.colors, R.mipmap.green, R.mipmap.pink,
                                R.mipmap.puple, R.mipmap.yellow};
        for(int i = 0; i < colorSum; i++) {
            Color color = new Color(colorName[i], colorId[i]);
            list.add(color);
        }
    }
}

在MainActivity.java中我们用一个initAdapter方法来初始化ListView需要显示的数据信息,之后将数据信息加入ColorAdapter对象中并且设置ListView控件的适配器为ColorAdapter对象。基本的步骤就完成了,让我们来看一下效果:

ListView简单的用法就是这样了。我们在实际使用的时候可以根据我们自己的需求来设置ListView控件的item布局文件和ListView的点击事件处理。

那么接下来我们来看一下RecyclerView控件的简单用法:我们先用RecyclerView控件来实现上面的功能,你可以选择新建一个Android工程,也可以在上面的ListView控件中的工程中加一个Activity来显示RecyclerView,笔者这里选择的是新建一个Activity来显示RecyclerView: 因为RecyclerView是在android5.0版本新增在support.v7库中,并不是在SDK中,所以我们要进行依赖声明:在app中的build.gradle文件中加入以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compile 'com.android.support:recyclerview-v7:25.1.1'

并且点击屏幕右上方的sync now,如下图:

这里我用的是android studio IDE 个人感觉android studio 相比eclipse在android开放方面好,不过android studio 对电脑性能要求更加高。 好了我们还要知道,RecyclerView控件的适配器必须继承于RecyclerView.Adapter<RecyclerView.ViewHolder> 类并且重写其中的抽象方法,那么我们新建一个适配器类用来适配要在RecyclerView控件中显示的数据:ColorAdapterForRecyclerView.java:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.administrator.listviewandrecycleview.MainActivity;
import com.example.administrator.listviewandrecycleview.R;
import java.util.List;

/**
 * Created by Administrator on 2017/2/21.
 */

public class ColorAdapterForRecyclerView extends RecyclerView.Adapter<ColorAdapterForRecyclerView.MyViewHolder> {

    private List<Color> colorList = null;
    private Context myContext = null; // Context对象作为Toast提示的第一个参数

    /*
     * 新建一个静态内部类MyViewHolder继承于RecyclerView.ViewHolder,根据java多态的特性,
     * 我们在上面的泛型参数就可以传入这个类作为参数
     */
    static class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        TextView textView;

        public MyViewHolder(View view) {
            super(view);
            imageView = (ImageView) view.findViewById(R.id.colorImageView);
            textView = (TextView) view.findViewById(R.id.colorNameTextView);
        }
    }

    public ColorAdapterForRecyclerView(Context context, List<Color> colorList)  {
        myContext = context;
        this.colorList = colorList;
    }

    /*
     * 重写父类的onCreateViewHolder方法,用于创建MyHolder对象作为RecyclerView的显示子项
     * 每个 RecyclerView 控件的 item 调用这个方法之后调用
     *  onBindViewHolder 方法之后才能作为一个子项显示在 RecyclerView 控件中
     */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.color_item, parent, false);
        /*
         * 为每一个RecyclerView中显示的子项设置点击处理事件
         */
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TextView textView = (TextView) v.findViewById(R.id.colorNameTextView);
                Toast.makeText(myContext, "颜色名称:" + textView.getText().toString(), Toast.LENGTH_SHORT).show();
                }
        });
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    /*
     * 重写父类的onBinderViewHolder方法,用于对RecyclerView中显示在屏幕中的子项设置对应的数据信息
     */
    @Override
    public void onBindViewHolder(MyViewHolder myViewHolder, int position) {
        Color color = colorList.get(position);
        myViewHolder.imageView.setImageResource(color.getImageId());
        myViewHolder.textView.setText(color.getColorName());
    }

    /*
     * 重写父类的getItemCount方法用于返回RecyclerView中一共有多少子项
     */
    @Override
    public int getItemCount() {
        return colorList.size();
    }

}

好了,RecyclerView的适配器已经写好了,接下来我们新建一个布局文件recycler_view_activity.xml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_recycle_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context="com.example.administrator.listviewandrecycleview.RecycleViewActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>

</LinearLayout>

这个布局文件就是加入了一个RecyclerView控件,注意我们在使用不是SDK中原本就存在的控件时,要写入这个控件的完整路径名(包括我们自定义的控件),接下来新建一个Activity用于显示RecyclerView,RecyclerViewActivity.java:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import listview.Color;
import listview.ColorAdapterForRecyclerView;

public class RecyclerViewActivity extends AppCompatActivity {

    private RecyclerView recyclerView = null;
    private String colorName[];
    private int colorId[];
    private static final int colorSum = 6;
    List<Color> colorList = new ArrayList<Color>();
    private ColorAdapterForRecyclerView colorAdapter = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycle_view);

        initAdapter(); // 初始化信息,和ListView中的类似,只是适配器的类型不同
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        /*
         * 因为RecyclerView只负责自己本身的创建和回收,所以RecyclerView中的子项创建、子项布局方式、
         * 分割线、动画效果等等都需要我们自己完成,正是这种完全解耦的机制成就了RecyclerView控件的
         * 灵活性,里面的东西完全由我们自己的需求来编辑逻辑完成
         */
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager); // 设置布局方式为线性布局,默认为竖向布局
        recyclerView.setAdapter(colorAdapter);
    }

    protected void initAdapter() {
        colorAdapter = new ColorAdapterForRecyclerView(this, colorList);
        colorName = new String[]{
                "blue", "colors", "green", "pink", "puple", "yellow"};
        colorId = new int[]{R.mipmap.blue, R.mipmap.colors, R.mipmap.green, R.mipmap.pink,
                R.mipmap.puple, R.mipmap.yellow};
        for (int i = 0; i < colorSum; i++) {
            Color color = new Color(colorName[i], colorId[i]);
            colorList.add(color);
        }
    }
}

好了,大体上的代码我们都完成了,最后在主界面加一个按钮用于启动RecyclerViewActivity就行了。下面看运行结果:

这里依然是MainActivity中的显示,多了一个按钮用于启动RecyclerViewActivity。我们点击这个按钮:

启动了RecyclerViewActivity之后点击“green”那一行(单击别的行也是可以的),成功显示了我们设定的事件信息。那么接下来如何显示横向的滚动View呢,其实很简单:只需要在RecyclerViewActivity中加一句代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); // 设置控件内排布方式为水平

如图:

我们还需要对color_item.xml文件进行修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_marginLeft="20dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/colorImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/colorNameTextView"
        android:layout_marginLeft="10dp"
        android:textSize="40sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

其实就是把排布方式改为该为竖直方向,使得排版更加美观。好了,再试试:

成功了,我们可以左右滑动来显示不同的子项。那么如果要显示网状布局呢?其实也很简单,我们只需要改RecyclerView的布局管理类型为网状布局就行了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
* 设置网状布局管理器,每一行3个子项,排布方式为竖直方向排布
 */
StaggeredGridLayoutManager staggeredGriadLayoutManager = new StaggeredGridLayoutManager(
                                            3, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGriadLayoutManager);

如图:

来看看效果:

ok,和我们预想的一样

最后,这里只是RecyclerView控件的基本用法,RecyclerView控件的用法很多,我们可以自由的在控件里面加入分割线,子项减少和增加的动画效果等等,我们可以自由的定制属于我们的效果。有兴趣的小伙伴可以看一下这篇博文:为RecyclerView 控件添加分隔线:http://blog.csdn.net/hacker_zhidian/article/details/57487844

如果博客中有什么不正确的地方,还请多多指点。 谢谢观看。。。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年02月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【iOS】浅析近期越狱工具+“平刷”工具
越狱工具:unc0ver,chimera,checkra1n(chimera1n)
zby1101
2020/08/05
6.2K0
【iOS】浅析近期越狱工具+“平刷”工具
【iOS】越狱后的“救命稻草”
pwn最近更新了好几次unc0ver,相信各位朋友已经在各大公众号,论坛看到了,这里就不说它了
zby1101
2020/08/05
9430
【iOS】越狱后的“救命稻草”
【教程】checkra1n越狱教程+常用插件推荐
重要:越狱骨灰级玩家请忽略本篇文章,篇幅较长,大约2500+字,突有不适感,请返回上一页,继续忙你的事情
zby1101
2020/08/05
10.6K0
【教程】checkra1n越狱教程+常用插件推荐
iOS逆向之使用unc0ver越狱 iOS13.5
因为工作需要,笔者最近在研究越狱,网上看了很多文章,这篇文章记录了给iOS 13设备越狱的方式和过程,希望对你有帮助。
VV木公子
2020/09/11
13K0
iOS逆向之使用unc0ver越狱 iOS13.5
【iOS】关于iOS13越狱的一些事情
由于前几天偶然发现自己家宽带竟然是公网ip,这段时间一直在试着折腾一下ftp服务器,后面可能会写一篇搭建私有云(是ftp还是硬盘,还是类似网盘的的教程,随缘吧)
zby1101
2020/08/05
7660
【iOS】关于iOS13越狱的一些事情
iOS越狱是什么?大佬来解释来咯(二)
众所周知,越狱可以获取最高权限,而在iOS上访问系统根目录是需要最高系统权限的(虽然也有不需要越狱获取文件系统的实例)
zby1101
2020/08/05
1.1K0
iOS越狱是什么?大佬来解释来咯(二)
IOS7完美越狱方法教程及工具下载
就在几天之前,Apple发布了IOS7 beta2测试版。相比于beta1而言,第二个测试版对于性能和稳定性都做出了不少优化,并且带来了Ipad支持。相信不少喜欢尝鲜的朋友已然更新到IOS7 beta2了。但对于国内的很多用户而言,越狱仍然是必不可少的一个步骤。虽然IOS7的越狱工具还没有出现,但如果你有一台iPhone 4,则可以利用已有的工具对IOS7进行越狱。
reizhi
2022/09/26
1.2K0
IOS7完美越狱方法教程及工具下载
iOS逆向(10)-越狱!越狱!远程连接登录手机
之前的九篇文章讲述的是在不越狱的情况下,详细的讲解了对APP重签名的原理,如何动态库注入,以及之后的各种调试技巧。这些功能其实已经很强大了,能够帮助咱们在绝大多数情况下去分析并且更改对方的APP了。这对付一些在开发过程中没有安全意识的APP其实已经足以。但是但凡对方有对APP进行防护,那么重签名就显得有些弱鸡了。
iOSSir
2019/06/14
2.2K0
iOS逆向(10)-越狱!越狱!远程连接登录手机
ipad越狱有什么坏处吗?_平板越狱有什么好处
1. iPad越狱是什么?iPad越狱有什么好处和坏处?不越狱又有啥缺点? 越狱就是解除一些原版固件的限制。最大的好处是可以安装激活成功教程的软件和游戏,这些软件和游戏本来都是收费的。而且,有些功能很强大的软件,并不是花钱能在官方的App Store里能买到的(某些有米之人或许会说“我就不越狱,我都花钱买正版”,我只能客气地说他只知其一不知其二),比如SBSettings, OpenSSH, Lockdown Pro, Installous, MyWi, iFile, roqyBT(这个不被Apple接受的软件,也是收费的,而且最新版没有激活成功教程,想用的话也得买,我就刚在淘宝上买了一个)等等,这些软件的存在会让你一方面觉得iPad功能实在是太强大了,另外一方面又会觉得Apple实在是太不厚道了,整出那么多限制。越狱的坏处据说是不给保修,但我没有听说过这样的例子。不越狱的缺点嘛,就是越狱后的优点都没有。 注:其实不越狱也能安装激活成功教程的ipa,有一个叫ipa god的东西,不过这个比较复杂,要求也高(貌似要mac电脑并且安装装xcode),一般人玩不转,等有空了我去整一个来试试。
全栈程序员站长
2022/09/28
5.6K0
iPhone使用教程_iphone基础使用
大家好,又见面了,我是你们的朋友全栈君。 iPhone史上最全的使用教程 iPhone的解锁、越狱、激活、固件等等是什么意思,有什么分别 这几天看见好多新人问这几个词的含义及区别。我在这儿说说我的看法,不是官方解释,不懂的学习一下,懂的绕道,如有错误,敬请指正! 第一次买来时或恢复官方固件后,iPhone会处于那种只能拨打紧急电话状态,不能使用其它功能,如果要使用其它功能,就必须进行一项操作,那就是“激活”。一般有锁版的只有使用对应运营商的卡(如美国的AT&T卡)或者无锁版使用任何卡,才可以激活。激活之
全栈程序员站长
2022/09/29
14K0
iOS开发入门笔记
iOS开发入门笔记 本文面向已有其它语言(如Java,C,PHP,Javascript)编程经验的iOS开发初学者,初衷在于让我的同事一小时内了解如何开始开发iOS App,学习目标包括: 能使用Xcode IDE、模拟器 能修改、调试已有iOS App 能在已有应用内创建新模块 能创建新应用 能发布应用到App Store 本文不包含任何高级的iOS开发知识,已学会iOS开发的同学不要看,看完这篇文章学会了的同学也不用再看了。 不仅是学习一门新语言 有过脚本开发经验的人(如Javascript,PHP,S
xiangzhihong
2018/02/06
4.1K0
全志 Tina Linux 系统软件 开发指南 sdk源码编译操作 深入理解Tina-sdk编译框架 支持百问网T113 D1-H哪吒 DongshanPI-D1s V853-Pro等开发板
编写目的:本文档作为Allwinner Tina Linux系统平台开发指南,旨在帮助软件开发工程师、技术支持工程师快速上手,熟悉Tina Linux系统的开发及调试流程。
韦东山
2022/12/28
5.2K0
全志 Tina Linux 系统软件 开发指南 sdk源码编译操作 深入理解Tina-sdk编译框架 支持百问网T113 D1-H哪吒 DongshanPI-D1s V853-Pro等开发板
黑群晖安装和使用的常见问题及解决办法【不定期更新中】
答:群晖系统跟Windows不同,Windows有个盘要当成系统盘,而群晖会在每个硬盘上自动安装系统。每个硬盘?对,没错,就是每个硬盘。比如你是6盘位,接了6个硬盘,这6个硬盘初始化以后,每个硬盘都有系统了。所以拿一个SSD来做系统盘的这个做法没必要。当然,也有全部用SSD的土豪,那就不是这个话题了。
cnlixs
2022/11/01
59.8K2
黑群晖安装和使用的常见问题及解决办法【不定期更新中】
TensorFlow 2.0 的新增功能:第三、四部分
如果您使用过 TensorFlow 1.x,则本部分将重点介绍迁移到 TensorFlow 2.0 所需的总体概念更改。 它还将教您使用 TensorFlow 可以进行的各种 AIY 项目。 最后,本节向您展示如何将 TensorFlow Lite 与跨多个平台的低功耗设备一起使用。
ApacheCN_飞龙
2023/04/26
2.5K0
吐血推荐|2万字总结Mac所有应用程序、软件工具和相关资料
现在随着互联网的发展,越来越多的公司都鼓励Mac办公,属实MacOS系统对于我们的工作开发效率有很大提升,所以我们需要收集各种类别非常好用的 Mac 应用程序、软件以及工具。作为一个资深 Mac 用户,我需要它们帮助我快乐、高效的工作,同时也分享给你们。
浅羽技术
2020/12/07
6.2K1
吐血推荐|2万字总结Mac所有应用程序、软件工具和相关资料
攻防信息收集之道|外网信息收集
从个人的角度去简单整理下打点前的信息收集那些事。从信息收集本质上来说多数内容都是大同小异,遇到坚壁时,不用死磕,毕竟条条大路通罗马。(大佬们也可以说说看法~向各位大佬学习!!)
亿人安全
2023/08/10
4.6K0
攻防信息收集之道|外网信息收集
你一定不知道的 AppStore 秘密
对于 iOS 开发者来说 App Store 是必经之路,大家一定多多少少都会有了解。但 App Store 的功能之多,并且每年都有更新,比如上一篇文章我们讲到 《解读 AppStore 新功能:自定义产品页面和 A/B Test 工具》 ,所以本文对一些大家平时经常接触的功能,但可能忽视的一些细节进行解说,也会对一些平时大家很少接触的功能进行探索。可能不是最全的,但一定有你不知道的 App Store 秘密!
37手游iOS技术运营团队
2021/08/03
3.4K0
你一定不知道的 AppStore 秘密
python基础(一)
  python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
用户1432189
2018/09/05
1.5K0
python基础(一)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11
认证是任何应用中最突出的功能之一,无论它是本机移动软件还是网站,并且自从保护数据的需求以及与机密有关的隐私需求开始以来,认证一直是一个活跃的领域。 在互联网上共享的数据。 在本章中,我们将从基于 Firebase 的简单登录到应用开始,然后逐步改进以包括基于人工智能(AI)的认证置信度指标和 Google 的 ReCaptcha。 所有这些认证方法均以深度学习为核心,并提供了一种在移动应用中实现安全性的最新方法。
ApacheCN_飞龙
2023/04/27
23.5K0
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11
OpenCV3 安卓应用编程:1~6 全
本章是为 Android 和 OpenCV 设置开发环境的快速指南。 我们还将研究 OpenCV 示例应用,文档和社区。
ApacheCN_飞龙
2023/04/27
5.4K0
推荐阅读
相关推荐
【iOS】浅析近期越狱工具+“平刷”工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验