在领先的android点:名真正需要的? [英] Leading dot in android:name really required?

查看:210
本文介绍了在领先的android点:名真正需要的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  

可能重复:结果
  <一href=\"http://stackoverflow.com/questions/4834122/whats-the-dot-for-when-registering-an-activity\">What's在&ldquo;点&rdquo;的登记一个活动时


在活动,服务等所有Android实例名称都开始用点:

 &LT;活动机器人:MyActivityNAME = /&GT;

我忘了这样做的所有Android项目 - 但他们做的工作完美

我的问题:是否真正需要这个前导点

编辑:下面是从我的应用程序的一个小快照示例。这个应用程序运行完美。它不使用合格的名称,它不使用点:

 &LT;活动
        机器人:出口=假
    机器人:名字=Tankvorgaenge&GT;    &所述;意图滤光器&gt;
        &lt;作用机器人:名字=android.intent.action.SEARCH/&GT;
    &所述; /意图滤光器&gt;    &所述;元数据
        机器人:名字=android.app.searchable
        机器人:资源=@ XML /搜索/&GT;
&LT; /活性GT;&LT;活动机器人:名字=Tankvorgangdetails/&GT;
&LT;活动机器人:名字=Tankvorgangdetailsbearbeiten/&GT;
&LT;活动机器人:名字=TankvorgangUebersicht/&GT;
&LT;活动机器人:名字=Verbrauch/&GT;&LT;服务机器人:名字=则将MyService/&GT;


解决方案

忽略的点,而不是完全限定包/类名,当且仅当指定的类是不是你的应用程序中的子包的一部分,将工作。

如果您的应用程序包的名字是 com.example.myapp <​​/ code>,和你有一个活动类 com.example.myapp.MyActivity


  1. 的android:NAME =MyActivity将工作

  2. 的android:NAME =。MyActivity将工作

  3. 的android:NAME =com.example.myapp.MyActivity将工作

但是,如果你在你的源代码树中的一个子包相同的应用程序包和活动类,如 com.example.myapp.myactivities.MyActivity 事情的变化。


  1. 的android:NAME =。myactivities.MyActivity将工作

  2. 的android:NAME =com.example.myapp.myactivities.MyActivity将工作

  3. 的android:NAME =MyActivity 将无法正常工作

  4. 的android:NAME =myactivities.MyActivity 将无法正常工作

3不起作用,因为这将推断出你的意思是类名称实际上 com.example.myapp.MyActivity 就像上面的第一个例子。具有此名称的类将不会被发现,你会得到一个错误。

4不起作用,因为它看起来像一个完全合格的类名,也就是系统会间preT这意味着 myactivities.MyActivity 是完全合格的名称本身,而不是真正的名称 com.example.myapp.myactivities.MyActivity

您需要前导点这里澄清,您使用的是相对路径,而不是绝对路径。如果不带包的信息仅指定一个类名都,系统推断出这一类是在你的应用程序包层次的根。

Possible Duplicate:
What's the “dot” for when registering an Activity

In all Android examples names of Activities, Services, etc. all start with a dot:

<activity android:name=".MyActivity" />

I forgot to do this in all Android projects - but they do work perfect.

My question: Is this leading dot really required?

EDIT: Here's a small snapshot example from one of my apps. This app works perfect. It doesn't use qualified names and it doesn't use dots:

<activity
        android:exported="false"
    android:name="Tankvorgaenge" >

    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>

    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable" />
</activity>

<activity android:name="Tankvorgangdetails" />
<activity android:name="Tankvorgangdetailsbearbeiten" />
<activity android:name="TankvorgangUebersicht" />
<activity android:name="Verbrauch" />

<service android:name="MyService" />

解决方案

Omitting the dot and not fully qualifying the package/class name will work if and only if the specified class is not part of a subpackage within your application.

If your application package name is com.example.myapp, and you have an activity class com.example.myapp.MyActivity:

  1. android:name="MyActivity" will work.
  2. android:name=".MyActivity" will work.
  3. android:name="com.example.myapp.MyActivity" will work.

But if you have the same application package and an activity class in a subpackage within your source tree such as com.example.myapp.myactivities.MyActivity things change.

  1. android:name=".myactivities.MyActivity" will work
  2. android:name="com.example.myapp.myactivities.MyActivity" will work
  3. android:name="MyActivity" will not work
  4. android:name="myactivities.MyActivity" will not work

3 doesn't work because that will infer that the class name you mean is actually com.example.myapp.MyActivity like in the first example above. A class with this name won't be found and you'll get an error.

4 doesn't work because it looks like a fully qualified class name, that is the system will interpret it to mean that myactivities.MyActivity is the fully qualified name itself, not the real name of com.example.myapp.myactivities.MyActivity.

You need the leading dot here to clarify that you're using a relative path, not an absolute path. If you specify just a class name with no package info at all, the system infers that the class is at the root of your application package hierarchy.

这篇关于在领先的android点:名真正需要的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆