首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >设计问题:在Android中如何做"UserControls“?试图避免一个包含所有代码的大型.java文件

设计问题:在Android中如何做"UserControls“?试图避免一个包含所有代码的大型.java文件
EN

Stack Overflow用户
提问于 2011-09-03 04:35:23
回答 2查看 536关注 0票数 0

我来自Visual /WinForms背景,在为Android开发时,我面临的问题是如何避免将所有代码放在一个大型..java文件中。

在WinForms中,很容易创建一个包含布局和代码以处理特定任务的新UserControl。这样,代码就不必放在一个大文件中,而是可以进行“模块化”排序。

如何在Android中实现同样的目标?举个例子,我的MainActivity.java包含了所有的代码。现在,我想扫描蓝牙设备。一个弹出应该出现在扫描和每当一个设备被发现,我想要一个列表(在弹出)被填充的信息BT设备。

所以,只要点击按钮,我就可以做.startDiscovery(),但是我真的希望所有的代码都在其他地方,而不是在我的主.java文件中。它应该是独立的,包括所有的事件侦听器。所有这些(挂钩事件等)都不应该出现在MainActivity中,应该全部放在"userControl“中(正如您可能理解的那样,这有很多很好的理由)。

做这件事的最佳方法是什么?我要这样做吗?**编辑2011-09-05 **

因此,我添加了一个类BluetoothTest.java,用于处理本文中描述的所有内容。然而,它的工作并不是很好。弹出窗口没有显示。我做得对吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.sdkexample;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;

public class BluetoothTest {

    private Context ct;
    private View parentView;
    public BluetoothTest(Context ct, View parentView)
    {
        this.ct = ct;
        this.parentView = parentView;
    }

    public void start()
    {
        LayoutInflater mInflater = (LayoutInflater) ct.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View btView = mInflater.inflate(R.layout.popup_bluetoothsearch, null);
        final ListView lv = (ListView)btView.findViewById(R.id.listViewBtDevices);
        lv.setAdapter(new ArrayAdapter<String>(ct, R.id.twoLineListItem1));
        PopupWindow pw = new PopupWindow(btView);
        pw.showAtLocation(parentView, Gravity.CENTER, 100, 100);

        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBluetoothAdapter == null) {
            // Device does not support Bluetooth
        }
        else
        {
            if (!mBluetoothAdapter.isEnabled())
                mBluetoothAdapter.enable();

            final BroadcastReceiver mReceiver = new BroadcastReceiver() {
                public void onReceive(Context context, Intent intent) {
                    String action = intent.getAction();

                    if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                        // 
                        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                        ArrayAdapter aa = (ArrayAdapter)lv.getAdapter();
                        aa.add(device.toString());

                        if (device.getName()== "DPP-350")
                        {
                            // ***
                            // HERE I WANT TO ADD THE DEVICE TO MY LIST IN MY POPUP!
                            // ***
                        }
                    }
                }
            };
            IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
            ct.registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

            mBluetoothAdapter.startDiscovery();
        }
    }

}

--编辑--

此页描述了一些东西。我在这篇文章中的问题是,正如我前面所描述的,代码都包含在“父”中;它不包含在UserControl的形式中。

“父”具有弹出窗口中元素的所有引用(例如,将TextView保存为mResultText),这是另一个不需要的东西。重点是弹出窗口应该是“独立的”,这样就可以从任何活动中使用它。我应该为我想要使用的每一个弹出窗口实现单独的代码。

-

下面是我想用来发现的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void SearchPrinter()
{
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (mBluetoothAdapter == null) {
        // Device does not support Bluetooth
    }
    else
    {
        final BroadcastReceiver mReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();

                if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                    // 
                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                    if (device.getName()== "DPP-350")
                    {
                        // ***
                        // HERE I WANT TO ADD THE DEVICE TO MY LIST IN MY POPUP!
                        // ***
                    }
                }
            }
        };
        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

        mBluetoothAdapter.startDiscovery();
    }

}
EN

回答 2

Stack Overflow用户

发布于 2011-09-03 04:53:17

这不应该是个问题。Android是基于Java的,Java是一种面向对象的语言。您需要创建单独的类来表示BluetoothListPopUp。在该类中,可以添加与弹出相关的所有相关方法,如addToList(),您将从MainActivity.java调用这些方法

这些步骤是:

  1. 创建类BluetoothListPopUp作为PopUp (可能是PopUpWindow的扩展)
  2. 还可以在单独的xml文件中创建此弹出窗口的布局。
  3. 添加所有特定于BluetoothListPopUp的方法,包括一个添加列表的方法
  4. 在MainActivity.java中实例化这个类
  5. 在onReceive()上,调用BluetoothListPopup中的方法将设备添加到列表中。
票数 0
EN

Stack Overflow用户

发布于 2011-09-03 05:18:06

在您的活动中,创建一个class.The类构造函数的实例将执行所有所需的操作,SearchPrinter()、startDiscovery等。

更新

从另一个类中,您可以访问所有GUI元素。您可以通过传递上下文引用(getApplicationContext())或小部件本身来实现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7293150

复制
相关文章
Java设计模式在Android中的实践
里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。需要注意以下几点:
xuexiangjys
2022/04/18
8590
Java设计模式在Android中的实践
如何避免微服务设计中的耦合问题
译自:How to Avoid Coupling in Microservices Design
charlieroro
2021/03/02
1.7K0
如何避免微服务设计中的耦合问题
node中删除一个文件夹下面所有包含某个字符的文件
const fs = require('fs'); const path = require('path');
用户4792657
2022/07/06
2.6K0
在MySQL表中查询出所有包含emoji符号的数据
1. 从以下地址下载emoji的utf8编码文件 https://gist.github.com/JoshyPHP/225b3c77005a89d81511
用户1148526
2022/10/04
13.5K0
在MySQL表中查询出所有包含emoji符号的数据
[C&C++]头文件包含问题
原文链接:https://blog.csdn.net/humanking7/article/details/79299045
祥知道
2020/03/10
1.8K0
在 Linux 中重命名文件夹中的所有文件
在Linux系统中,有时候我们需要批量重命名文件夹中的所有文件,以便更好地组织和管理文件。本文将详细介绍几种在Linux中重命名文件夹中所有文件的方法,包括使用命令行工具和脚本等方式。
网络技术联盟站
2023/06/08
5.1K0
在 Linux 中重命名文件夹中的所有文件
在Greenplum(PostgreSQL)表中查询出所有包含emoji符号的数据
1. 从以下地址复制emoji的unicode https://unicode.org/emoji/charts/full-emoji-list.html
用户1148526
2022/10/06
3.6K0
在Greenplum(PostgreSQL)表中查询出所有包含emoji符号的数据
Python检查Word文件中包含特定关键字的所有页码
Word文件属于流式文件,在没有打开之前难以确定页码,可以考虑临时转换为PDF文件,这样就可以确定页码了,再逐页提取PDF文件中的文字,如果包含特定关键字就输出相应的页码。
Python小屋屋主
2020/08/07
4.5K0
Python检查Word文件中包含特定关键字的所有页码
在Java中如何加快大型集合的处理速度
作者 | Nahla Davies 译者 | 明知山 策划 | 丁晓昀 本文讨论了 Java Collections Framework 背后的目的、Java 集合的工作原理,以及开发人员和程序员如何最大限度地利用 Java 集合。 1 什么是 Java 集合 尽管 Java 已经过了 25 岁生日,仍然是当今最受欢迎的编程语言之一。超过 100 万个网站通过某种形式在使用 Java,超过三分之一的软件开发人员的工具箱中有 Java。 Java 在它的整个生命历程中经历了重大的演变。一个早期的
深度学习与Python
2023/03/29
1.9K0
在Java中如何加快大型集合的处理速度
linux 上查找包含特定文本的所有文件
原文链接:https://rumenz.com/rumenbiji/linux-find-strings.html
入门笔记
2022/07/21
3.6K0
linux 上查找包含特定文本的所有文件
grep > grep -rnw '/path/to/somewhere/' -e 'pattern' -r或者-R是递归的, -n 是行号,并且 -w 代表匹配整个单词。 -l (小写 L) 可以添加只给出匹配文件的文件名。 -e 是搜索过程中使用的模式 除了这些, --exclude, --include,--exclude-dir标志可用于高效搜索: 只搜索那些具有 .c 或 .h 扩展名的文件 > grep --include=\*.{c,h} -rnw '/path/to/somewhere/'
入门笔记
2022/06/02
3.4K0
linux 上查找包含特定文本的所有文件
原文链接:https://rumenz.com/rumenbiji/linux-find-strings.html
入门笔记
2021/11/24
3.9K0
史上被复制最多的StackOverflow Java代码段中包含一个Bug
一直以来,被复制使用最多的StackOverflow Java代码段中暗藏一个bug。该代码的作者,Palantir的Java开发人员Andreas Lundblad亲自承认了这件事。
FB客服
2019/12/10
6600
史上被复制最多的StackOverflow Java代码段中包含一个Bug
在Vim/Vi中删除行、多行、范围、所有行及包含模式的行
使用linux服务器,免不了和vi编辑打交道,命令行下删除数量少还好,如果删除很多,光靠删除键一点点删除真的是头痛,还好Vi有快捷的命令可以删除多行、范围。
子润先生
2021/06/24
109.1K0
代码安全之文件包含
PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
信安之路
2018/08/08
7070
代码安全之文件包含
Python查找包含指定字符串的所有文件
代码功能: 查找包含指定字符串的所有文件。 技术要点: 1)广度优先遍历目录树; 2)检查文件中是否包含特定的字符串。 运行效果:
Python小屋屋主
2019/12/13
3.1K0
Python查找包含指定字符串的所有文件
C++核心准则​NL.5:避免在名称中包含类型信息
If names reflect types rather than functionality, it becomes hard to change the types used to provide that functionality. Also, if the type of a variable is changed, code using it will have to be modified. Minimize unintentional conversions.
面向对象思考
2020/11/25
7430
在Java中如何避免“!=null”式的判空语句?
我整天都是在跟Java打交道。我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPointerException。但是我发现这样检测代码实在是太丑了,而且及其不可读。
哲洛不闹
2018/09/14
2.2K0
在Java中如何避免“!=null”式的判空语句?
我整天都是在跟Java打交道。我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPointerException。但是我发现这样检测代码实在是太丑了,而且及其不可读。
哲洛不闹
2018/09/18
5.3K0
在Java中如何避免“!=null”式的判空语句?
我整天都是在跟Java打交道。我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPointerException。但是我发现这样检测代码实在是太丑了,而且及其不可读。
哲洛不闹
2018/09/19
3.4K0

相似问题

Java文件下载代码设计问题

20

当试图比较大型文件时,Java代码挂起

15

在Android中包含Java源代码的jar文件

22

在Java中创建包含大型文件的目录

115

OOP设计问题-避免在类似类中重复代码?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文