ContextMenu与TabHost

深度学习特征融合(feature fusion)操作详解 特征融合是指在深度神经网络中,将来自不同来源(如不同网络分支、不同模态、不同时间步、不同空间尺度或不同抽象层级)的特征表示进行有策略地整合,以生成更具判别性、鲁棒性和语义丰富性的联合特征表示。其核心目标是最大化信息互补性,最小化信息冗余与噪声干扰。关键问题:如何“有效”融合?——这取决于任务需求、数据特性、计算资源和融合机制的设计。✅ 是否对齐了空间/通道/模态?✅ 融合方式是否与任务匹配?(检测需定位+语义 → 多尺度融合)✅ 是否引入可学习机制提升适应性?✅ 是否控制了计算开销? 阅读详情

1、ContextMenu

第一种ContextMenu

这里写图片描述

public class MainActivity extends AppCompatActivity {

    private Button mButton;

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

        mButton = findViewById(R.id.button);

        mButton.setOnCreateContextMenuListener(MainActivity.this);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.showContextMenu();
            }
        });
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.context_menu, menu);
    }

    //点击事件处理
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.text1:
                Toast.makeText(MainActivity.this,"你点击了" + item.getTitle(), Toast.LENGTH_SHORT).show();
                break;

            case R.id.text2:
                Toast.makeText(MainActivity.this,"你点击了" + item.getTitle(), Toast.LENGTH_SHORT).show();
                break;

            case R.id.text3:
                Toast.makeText(MainActivity.this,"你点击了" + item.getTitle(), Toast.LENGTH_SHORT).show();
                break;

            default:
                break;
        }
        return super.onContextItemSelected(item);
    }
}

在res文件夹下创建menu文件夹,再创建context_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/text1"
        android:title="文本1"
        />
    <item android:id="@+id/text2"
        android:title="文本2"
        />

    <item android:id="@+id/text3"
        android:title="文本3"
        />
</menu>

第二种ContextMenu

这里写图片描述

public class MainActivity extends AppCompatActivity {

    private ArrayList<String> mList;
    private ListView mListView;

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

        mListView = findViewById(R.id.listView);

        mList = new ArrayList<>();
        for(int i = 0 ; i < 3; i++) {
            mList.add("文本" + i);
        }

        mListView.setAdapter(new ArrayAdapter<String>(
                MainActivity.this,
                android.R.layout.simple_expandable_list_item_1,
                mList
        ));
        /*为listView添加()注册上下文菜单*/
        registerForContextMenu(mListView);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        //获取适配器
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        //设置标题
        menu.setHeaderTitle(mList.get(info.position));
        /*设置选项内容*/
        //参数一:组,参数二:项目编号 参数三:位置
        menu.add(0,1,0, "嘤嘤嘤");
        menu.add(0,2,0, "噫噫噫");
        menu.add(0,3,0, "呀呀呀");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                Toast.makeText(MainActivity.this,"你点击了" + item.getTitle(), Toast.LENGTH_SHORT).show();
                break;

            case 2:
                Toast.makeText(MainActivity.this,"你点击了" + item.getTitle(), Toast.LENGTH_SHORT).show();
                break;

            case 3:
                Toast.makeText(MainActivity.this,"你点击了" + item.getTitle(), Toast.LENGTH_SHORT).show();
                break;

            default:
                break;
        }
        return super.onContextItemSelected(item);
    }
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.admin.vip_10.MainActivity">

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

    </ListView>

</LinearLayout>

注意一点就是此处弹出ContextMenu需要长按。

2、TabHost

这里写图片描述

这里写图片描述

第一种TabHost写法:

<TabHost android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </TabWidget>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            >

            <LinearLayout
                android:id="@+id/layout_1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/colorPrimaryDark"
                android:orientation="vertical"
                >

            </LinearLayout>

            <LinearLayout
                android:id="@+id/layout_2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/colorAccent"
                android:orientation="vertical"
                >

            </LinearLayout>
        </FrameLayout>

    </LinearLayout>
</TabHost>

需要注意的地方:
1. TabHost id必须是 android:id=”@android:id/tabhost”
2. TabWidget id必须是 android:id=”@android:id/tabs”
3. FrameLayout id必须是 android:id=”@android:id/tabcontent”

//注意继承TabActivity
public class MainActivity extends TabActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TabHost tabHost = getTabHost();
        tabHost.addTab(
                tabHost.newTabSpec("1").setIndicator("layout_1").setContent(R.id.layout_1)
        );
        tabHost.addTab(
                tabHost.newTabSpec("2").setIndicator("layout_2").setContent(R.id.layout_2)
        );
    }
}

第二种TabHost的写法:

activity_main.xml文件中几乎一样的要求,但是其中的TabHost的id可以自定义。

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TabHost tabHost = findViewById(R.id.myTabHost);

        //启动tabHost
        tabHost.setup();

        TabHost.TabSpec spec1 = tabHost.newTabSpec("1");
        spec1.setIndicator("layout_1");
        spec1.setContent(R.id.layout_1);

        TabHost.TabSpec spec2 = tabHost.newTabSpec("2");
        spec2.setIndicator("layout_2");
        spec2.setContent(R.id.layout_2);

        //别忘了添加到tabHost中
        tabHost.addTab(spec1);
        tabHost.addTab(spec2);
    }
}
全网唯一OpenCyphal/UAVCAN教程(8)libcanard介绍 当Cyphal里,这个结构体代表一条完整的Cyphal消息,之后我们会根据metadata里提供的元信息,其实就是消息ID,调用对应的反序列化函数,将payload还原成具体的Cyphal消息。用于构造一个新的发送队列,原则上一个can物理接口需要分配一个发送队列,如果它们的MTU大小一致,是可以共用一条的。这个库不包含IO层,是平台无关的,意义是没有实现具体的数据收发,仅提供将发送出去的Cyphal消息转成can帧,以及将收到的can帧转成Cyphal消息。返回值是这条消息拆解成的can帧的数目。.... 阅读详情

相关推荐

STM32CubeMX | HAL库实战:ADC多通道采集模式深度解析(轮询、DMA、TIM触发)

本文深度解析了基于STM32CubeMX与HAL库实现ADC多通道数据采集的三种核心模式:轮询、DMA以及TIM触发DMA。文章通过对比分析,详细阐述了各模式的配置要点、适用场景与潜在陷阱,旨在帮助开发者根据实时性、CPU占用及采样精度等需求,选择并实现高效稳定的多通道数据采集方案。

postgres8guard的博客 972

Submit Text2 插件下载列表 20151104 及离线安装方法

说在前头: 因为公司网络问题,没有办法正常连接https://sublime.wbond.net/repositories.json,而且就算我自己发布这个json站点,依然报CA证书错误而无法获取下载列表。 所以只能离线安装插件。 虽然麻烦点,但是总归不能安装的好。 安装方法: 1. 按照下述列表的url字段下载压缩包。(例如jquery:https://codeload.github

sam的牛栏 2万+

应用软件——Altium Designer 19 Gerber/坐标文件

如何输出Gerber文件 步骤如下: 打开需要输出的PCB文件 2. 设置原点坐标 3. 打开Gerber Files 选项,File–>Fabrication Opuputs–>Gerber Files。 4. General参数设置。 用于指定输出Gerber文件中使用的单位(Units)和格式(Format)。单位可以是公制(Millimeters)和英制(Inches);格式栏中2:3,2:4,2:5代表文件中使用的不同数据精度,其中2:3表示数据含2位整数3位小数;相应的,另外两个分

染血黑兔的博客 7204

007.androidUI开发进阶(基础--案例) .

1.Dialog有四种,分别是AlertDialog,ProgressDialog,DatePickerDialog,TimePickerDialog 1.1AlertDialog public class MainActivity extends Activity { private View view; private TextView tView; private EditT...

weixin_30536513的博客 178

SAP MM委外加工保姆级教程:从BOM配置到MIGO发货的完整避坑指南

本文提供SAP MM模块中委外加工的完整操作指南,涵盖从BOM配置到MIGO发货的全流程。详细解析委外采购和工序委外两种模式,包括主数据配置、采购订单创建及物料移动等关键步骤,帮助用户规避常见错误,提升供应链管理效率。特别适合制造业企业实施SAP外包业务参考。

weixin_26905487的博客 529

基于高精度三维机器视觉的新能源汽车锂电池表面缺陷检测

在机器视觉行业迅速发展的背景下,市场上提供了功能强大且种类齐全的3D相机系列,可以满足锂电池从电芯到模组各个工艺和工位的3D检测需求。

Hinyeung_Limited的博客 1133

007.androidUI开发进阶(对话框) .

1.Dialog有四种,分别是AlertDialog,ProgressDialog,DatePickerDialog,TimePickerDialog 1.1AlertDialog public class MainActivity extends Activity { private View view; private TextView tView; private EditT

左耳的专栏 1032

Ubuntu下用QEMU模拟运行OpenBMC

在调试过程中,安装了很多依赖库,具体没有记录。关于kvm,也没理清具体有什么作用。本文仅记录,用QEMU成功的将OpenBMC跑起来的过程,做备忘,也供大家参考。

Sunny的博客 1207

Android学习笔记 - TabHost 和 Menu(一)

TabHost 有时,我们想在一个window中显示多个视图,这时就需要用到Tab容器。在Android里它叫TabHost。 使用TabHost有两种方式: 在相同的activity中使用TabHost导航多个视图使用TabHost导航多个Activity(通过intents) Tab应用的结构 TabHost的Activity的结构如下:

joker_wqz的专栏 533

STM32F103C8T6+I2C+DMA读取陀螺仪模块JY901S(硬件I2C

说明:1.本实验代码适用移植一切stm32f1系列;2.本实验使用的是外设资源硬件I2C2;3.本实验运用的是DMA单次模式,如果需要DMA的循环模式,请移步我的另一篇文章;4.本文章不提供陀螺仪校准教学,并是在没有校准陀螺仪情况下读取数据;5.本文章是作者的学习记录及心得,如有不足,欢迎指正。 总结:亲测stm32f103c8t6最小系统板通过片上外设资源I2C配合DMA读去陀螺仪模块jy901s偏航角有效。

anquanyuanqqadsy的博客 6172

关于并网继电器的继电器自检逻辑及实现方式

对于常规的光伏并网逆变器来说,继电器控制至关重要。继电器一般位于逆变电感后,共模电感前,用于将逆变电压与电网电压脱开,一般国外有双继电器的安规强制认证要求,国内目前只需要单继电器要求(后续应该会有双继电器要求,个人感觉)

weixin_29982209的博客 2616

UI组件开发(Dialog、Menu、Notification、TabHost的使用)

今天的这一篇我们主要讲的就是,标题中提及到的几个知识点,也就是关于Android UI开发的组件开发方面的讲解,我会一一说明和举例,希望对大家有所帮助。一.Dialog(对话框)1.简单介绍: 对话框是一种显示于Activity之上的界面元素,常用的对话框有如下几种:(1)AlertDialog(提示对话框)(2)ProgressDialog(进度对话框)(3)...

weixin_33774883的博客 300

电机控制的智慧之眼:全面解析FOC状态观测器

摘要:本文深入探讨磁场定向控制(FOC)中的状态观测器技术,重点分析其在无传感器电机控制中的关键作用。文章详细介绍了滑模观测器(SMO)、扩展卡尔曼滤波(EKF)、龙贝格观测器和高频注入法等主流观测器的工作原理、技术特点及适用场景,其中SMO因结构简单、鲁棒性强成为当前主流方案。同时阐述了观测器与锁相环(PLL)结合的工程实践方案,并针对不同应用场景提供了观测器选型建议。文章还探讨了启动问题处理、参数敏感性等工程挑战的解决方案,以及混合观测器、AI应用等未来发展趋势。这些观测器技术使电机系统在无机械传感器情

汽车软件开发 275

登录界面设计

效果图: 1、UI界面设计 采用RelativeLayout布局,主要说中间这块输入账号与密码的设计。 分别采用两个LinearLayout,在往里加上控件,调整位置。 那条灰色的线通过控件View实现。 这里首先隐藏了删除按钮的图片,如果输入数据的 时候,自然会显示出来。 android:visibility="invisible" 还有一些自己添加的style与col...

Reserve_Scale的博客 4713

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ListView与GridView

1、ListView 效果演示: 第一步 UI界面与ListView中Item设计 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sc...

Reserve_Scale的博客 1401

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计算器布局

LinearLayout 利用LinearLayout的层层嵌套完成。 注意LinearLayout的嵌套与weight权重就好。 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:...

Reserve_Scale的博客 739

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ListView多条目与checkBox全选删除操作

1、多条目 效果图: 主要不一样的地方是在自定义的MyAdapter.java中。 private final int TYPE_1 = 0; private final int TYPE_2 = 1; //指定想要实现的布局类型 @Override public int getItemViewType(int position) { ...

Reserve_Scale的博客 522

初识Android

1、下载,安装Android Studio 2、环境配置2.1 2.1、已经下载过SDK 2.2 、未下载SDK 3、新建工程 4、了解工程目录 4.1 app目录结构 4.2 res目录 4.3 两个build.gradle文件 4.3.1 最外层的build.gradle文件 4.3.2 app目录下的build.gradle文件

Reserve_Scale的博客 479

Fragment

1、Fragment生命周期 官方Fragment生命周期图 方法: 1. onAttach( ) : Fragment已经关联了一个Activity,通过getActitivty()方法可以获取Activity。 2. onCreate( ) :系统初始化Fragment。 3. onCreateView( ):初始化Fragment布局 4. onActivityCre...

Reserve_Scale的博客 430

Android布局

1、LinearLayout(线性布局) 1.1 orientation 布局中控件的排列方式。 horizontal : 水平排列 vertical : 竖直排列 1.2 weight 简单来说,就是权重,比例。 效果: 屏幕被平均分成了1:2。 这里需要注意的一点是,在设置weight的时候,看情况把width(或height)设置为0dp。 有一点需要特别注意:就...

Reserve_Scale的博客 403

Dialog的基础使用形式

1、双选项Dialog 2、三选项Dialog 3、列表Dialog 4、单选Dialog 5、多选Dialog 6、等待Dialog 7、进度条Dialog 8、输入框Dialog 9、自定义Dialog &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xml...

Reserve_Scale的博客 362

android基础控件(2)

1、progressBar progressBar ,进度条,是一个显示进度的控件。 public class MainActivity extends AppCompatActivity { private ProgressBar mCirclrBar; private ProgressBar mRecBar; private Button mStart; ...

Reserve_Scale的博客 349

第一个Android程序

首先我们先来了解一下基础的三个Android控件:Textview, Button, ImageView。以下试验采用的都是LinearLayout(线性布局)。并在LinearLayout标签属性中加入以下语句,代表垂直放置控件。android:orientation="vertical"1、三个基本控件1.1、TextView首先我们了解一下这些属性的意思。1、android:layout_wi

Reserve_Scale的博客 338

ListView与ExpendableListView

1、ListView添加数据效果图:activity_main.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto

Reserve_Scale的博客 332

Activity生命周期

1、Acitivity的基本状态 在android 中,Activity 拥有四种基本状态: Active/Running 一个新 Activity 启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态(active or running)。 Paused 当 Activity失去焦点, 被一个新的...

Reserve_Scale的博客 320

Android基础控件

Android基础控件 1、RadioGroup 单选框。 其中的按钮为控件:RadioButton。 实际效果图: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:a...

Reserve_Scale的博客 315
上一篇: Dialog的基础使用形式
下一篇: RecyclerView的简单使用
ReScale
博客等级 码龄9年 10粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值