我来自Visual /WinForms背景,在为Android开发时,我面临的问题是如何避免将所有代码放在一个大型..java文件中。
在WinForms中,很容易创建一个包含布局和代码以处理特定任务的新UserControl。这样,代码就不必放在一个大文件中,而是可以进行“模块化”排序。
如何在Android中实现同样的目标?举个例子,我的MainActivity.java包含了所有的代码。现在,我想扫描蓝牙设备。一个弹出应该出现在扫描和每当一个设备被发现,我想要一个列表(在弹出)被填充的信息BT设备。
所以,只要点击按钮,我就可以做.startDiscovery(),但是我真的希望所有的代码都在其他地方,而不是在我的主.java文件中。它应该是独立的,包括所有的事件侦听器。所有这些(挂钩事件等)都不应该出现在MainActivity中,应该全部放在"userControl“中(正如您可能理解的那样,这有很多很好的理由)。
做这件事的最佳方法是什么?我要这样做吗?**编辑2011-09-05 **
因此,我添加了一个类BluetoothTest.java,用于处理本文中描述的所有内容。然而,它的工作并不是很好。弹出窗口没有显示。我做得对吗?
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),这是另一个不需要的东西。重点是弹出窗口应该是“独立的”,这样就可以从任何活动中使用它。我应该为我想要使用的每一个弹出窗口实现单独的代码。
-
下面是我想用来发现的代码:
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();
}
}
发布于 2011-09-03 04:53:17
这不应该是个问题。Android是基于Java的,Java是一种面向对象的语言。您需要创建单独的类来表示BluetoothListPopUp。在该类中,可以添加与弹出相关的所有相关方法,如addToList(),您将从MainActivity.java调用这些方法
这些步骤是:
发布于 2011-09-03 05:18:06
在您的活动中,创建一个class.The类构造函数的实例将执行所有所需的操作,SearchPrinter()、startDiscovery等。
更新
从另一个类中,您可以访问所有GUI元素。您可以通过传递上下文引用(getApplicationContext()
)或小部件本身来实现这一点。
https://stackoverflow.com/questions/7293150
复制相似问题