我正在尝试为自己的框架创建一个插件架构的方法.我已经阅读了很多主题,并在这里和其他网站发布.基本上我来到以下解决方案,似乎是PHP(目前)唯一的好选择.
这个想法是每个类都像类一样扩展了一种观察者.所以Template类,BaseController等总是扩展一个Plugin类.
class BaseController extends Plugin
{
public function __construct()
{
// Plugin check, notify all loaded plugins
$this->checkForEarlyHooks();
// Init some standard stuff
$this->view = new Template();
$this->baseLayout = 'layout.html';
$this->something = new Something();
// Plugin check, notify all loaded plugins
$this->checkForLateHooks();
}
}
Run Code Online (Sandbox Code Playgroud)
所以这里基本上发生的是当indexController扩展baseController时,插件检查就完成了.在这种情况下为构造函数.在实际调用Action方法之前,如果要使用插件进行某种登录检查,这可能很方便.
Plugin类可以解析从哪个类调用,并知道在加载的插件中要查找的函数.
另请注意,它会检查加载的插件列表2次.在构造函数中加载(早期)之前的一个,并且在加载所有变量(晚期)时加载一个.
我还可以在"checkForLateHooks()"函数中添加变量.因此钩子函数也可以操作它们,比如'baseLayout'变量.
钩子函数看起来像这样:
public function hookConstruct ( &$baseLayout )
{
$baseLayout = 'login.html';
}
Run Code Online (Sandbox Code Playgroud)
现在基本上我的问题是,这种方法有什么好处吗?我知道也有很多其他方法可以做到这一点.但我主要不想在以后遇到设计问题.现在看来这是一个好主意,但你永远不会知道事情会如何发挥作用......
如果我记得正确(从我读过的所有帖子中),这有点像WordPress(以及其他一些框架).
我试图用nfc功能制作应用程序.问题是当发现nfc标记时,挂起的意图总是会创建一个已经存在的新活动.我正在使用标签主机.如何在不进行新活动的情况下制作pendingintent.非常感谢.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mNfcPendingIntent = PendingIntent.getActivity(this, 0,new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
}
protected void onResume() {
super.onResume();
mResumed = true;
// Sticky notes received from Android
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
NdefMessage[] messages = getNdefMessages(getIntent());
byte[] payload = messages[0].getRecords()[0].getPayload();
try { cekNfc(new String(payload)); }
catch (SQLException e) { e.printStackTrace(); }
catch (NoSuchAlgorithmException e) { e.printStackTrace(); }
catch (UnsupportedEncodingException e) { e.printStackTrace(); }
setIntent(new Intent());
}
enableNdefExchangeMode();
}
private void enableNdefExchangeMode() { mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, mNdefExchangeFilters, null); …Run Code Online (Sandbox Code Playgroud) 我有一个选项卡布局,活动显示在frameLayout中.如何通过再次单击"Home"-Tab从"主页"选项卡重新加载当前活动?
public class TabTestActivity extends TabActivity implements OnClickListener{
TabHost tabHost;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//MENÜ////////////////////////////////////////////
/** TabHost will have Tabs */
tabHost = (TabHost)findViewById(android.R.id.tabhost);
/** tid1 is firstTabSpec Id. Its used to access outside. */
TabSpec firstTabSpec = tabHost.newTabSpec("tid1");
TabSpec secondTabSpec = tabHost.newTabSpec("tid2");
TabSpec thirdTabSpec = tabHost.newTabSpec("tid3");
TabSpec fourthTabSpec = tabHost.newTabSpec("tid4");
/** TabSpec setIndicator() is used to set name for the tab. */
/** TabSpec setContent() …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用复合Swing组件作为菜单的一部分.
除了一个细节之外,一切都运行得很好:组件包含JComboBoxes,每当用户点击其中一个打开其下拉列表时,下拉列表就会打开,但菜单会消失.JComboBox单击时是否可以使菜单保持打开状态?
我分类了JMenu.这是相应的代码:
public class FilterMenu extends JMenu {
public FilterMenu(String name) {
super(name);
final JPopupMenu pm = this.getPopupMenu();
final FilterPanel filterPanel = new FilterPanel(pm) {
@Override
public void updateTree() {
super.updateTree();
pm.pack();
}
};
pm.add(filterPanel);
}
}
Run Code Online (Sandbox Code Playgroud)
FilterPanel是自定义复合组件.在pm.pack()被称为适应的大小JPopupMenu的时候filterPanel大小的变化.
谢谢你的帮助
我的申请有三个活动说A -> B-> C.
活动A通过另一个活动调用startActivityForResult().活动B和C也被类似地调用.我也必须从通知栏调用活动A(如果有一些特定的通知).
现在,如果我现在处于活动B或C中,并且我点击通知栏,并且调用活动A,则应用程序仅转到活动A,并且通过活动B或C输入的数据不会保留.
我不想要这样的行为.我希望如果我点击通知,它应该只重定向到当前屏幕.有人可以提供帮助.(我提到activity:launchMode过SingleTask).
我正在使用Eclipse在Android中使用一些基本编程来愚弄.我目前正在浏览一本书,并阅读书中所写的一些示例代码.
我注意到在这本特定的书中,到目前为止所有的例子都在Main-Activity中占据了一席之地.我不相信这是一个非常好的面向对象编程实践,因为我来自传统的Java背景.
这是移动平台的常见做法吗?不应该将所有类都包含在自己的文件中吗?
我想在我的活动中添加一个按钮,它将返回相对布局的所有子视图.
如何获得相对布局视图的所有子视图?
我正在使用ActionBarSherlock的应用程序.正如它的文档指出:
[...]图书馆要求它和你的项目都是用Android 4.0或更新版本编译的.该项目还要求您在编辑器和您可能正在使用的任何构建系统中使用JDK 1.6进行编译.
所以,这意味着我将针对Android 4.X编译我的应用程序(和库),但在我的Manifest中,我声明我的目标是(例如)API Level 9.
这一切都很好,但有一些东西扰乱了我.来自FAQ:
使用库时,我应该在清单中定位什么API级别?
需要定位API级别11或更高级别,因为它会导致Android在较新设备上运行时自动添加本机操作栏.因为要对编制新的API,但你的应用程序很可能会在设备上使用旧版本的Android的运行必须要特别注意采取要么避免使用或正确检查并打电话给你最低的SDK版本之后引入的任何方法.
这意味着,我将不得不手动检查每个方法调用,所以我不使用我的目标API级别中没有的任何方法(在我的情况下为9)?这对我来说听起来不对.
有没有办法告诉我的IDE(IntelliJ),我只使用API级别9(所以我没有得到任何自动完成的非现有方法/类,不要意外使用它们)和然后选择针对另一个Android版本进行编译?
或者我可以使用一些自动检查(在编译时运行)来检查?
我成功地使用android ndk-Standalone工具链交叉编译了一个c ++库,然后我在Eclipse中创建了一个新的android应用程序项目,当我将mylib.so放入jni文件夹并执行ndk-build命令时,它工作正常
Prebuilt : mylib.so <= jni/
Install : mylib.so => libs/armeabi/mylib.so
Run Code Online (Sandbox Code Playgroud)
但是在添加时
static{
System.load("/data/data/my_package/lib/mylib.so");
}
Run Code Online (Sandbox Code Playgroud)
我在logcat中说错了
AndroidRuntime
Caused by: java.lang.UnsatisfiedLinkError: Cannot load library:
reloc_library[1306]: 36 cannot locate 'xmlCleanupParser'...``
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索它,但没有找到任何方法来解决这个问题.
我将更具体地为Android手机制作应用程序.
我将有多个活动和许多课程,所以我正在考虑存储游戏数据.
游戏数据应该对于活动是可见的,所以我在想是否应该使用单例来存储数据并从任何活动中轻松接收数据,或者我应该使用Intents传递数据?
会有少量和大量的数据(分数很小,如地图等大而且......).
对于分数,我会使用意图,但那么以同样的方式做所有事情不是更好吗?如果是的话,我认为整个游戏状态的单身人士会更好.有任何想法吗?