【问题标题】:Clicking items in ListAdapter doesn't do anything单击 ListAdapter 中的项目不会执行任何操作
【发布时间】:2012-10-29 06:30:05
【问题描述】:

我正在尝试使用 android 制作我的第一个列表适配器,它提供了列表,但是当我单击项目时,没有任何反应。我唯一的猜测是我在定义 Class cvar 的那一行之后的注释。

package scouting.form;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class Menu extends ListActivity{

    String classes[] = {"SCOUTING","LOGIN","MAIN"};

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(Menu.this,android.R.layout.simple_list_item_1,classes));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position,long id)
    {
        super.onListItemClick(l, v, position, id);
        String cheese= "com.cody.graham."+classes[position];
        try{
            Class cvar=Class.forName(cheese);     //Eclipse has a warning on this line "Class is a raw type. References to generic type Class<T> should be parameterized". I don't really know what that means.
            Intent intention=new Intent(Menu.this,cvar);
            startActivity(intention);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
    }
}

编辑:

AndroidManifest 的一部分:

<activity android:name=".splash_screen" android:label="@string/title_activity_splash" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name=".Login" android:label="@string/title_activity_login" android:exported="false">
    <intent-filter>
        <action android:name="com.cody.graham.LOGIN" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

<activity android:name=".Scouting" android:label="@string/title_activity_scouting" android:exported="false">
    <intent-filter>
        <action android:name="com.cody.graham.SCOUTING" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

【问题讨论】:

  • Logcat 输出?我的预感是找不到这些名称的类。你知道你可以创建一个实际类的列表吗?

标签: android eclipse listadapter


【解决方案1】:
  String classes[] = {"SCOUTING","LOGIN","MAIN"};

尝试命名类的显示方式。喜欢Scouting

还尝试更改您的清单:

&lt;activity android:name=".Scouting" /&gt;
这是您只在这种情况下需要的。

Eclipse 在这一行有一个警告“类是原始类型。对泛型类的引用应该被参数化”。 这是一个警告,在这种情况下它不会给你一个错误。意思是 Class , T 是你得到的类类型。例如:

Class<? extends Activity> cvar=Class.forName(cheese);

欲了解更多信息:link

【讨论】:

  • 作为附加说明,Java 中的所有内容都区分大小写。类查找也不例外 - 您可以轻松拥有一个名为 Scouting 的类和一个完全不同的名为 SCouTing 的类
  • 我知道。在我收到这篇文章之前,我对此进行了测试,因为我有一个名为“Scouting”的类,清单将其名称设置为“com.cody.graham.SCOUTING”,而在其他地方我使用“scuting”。我将列表 {"SCOUTING","Scouting","scuting"} 作为测试,这 3 个按钮都没有做任何事情。
  • 我看不出 java 代码有什么问题。你能仔细检查你的包名吗?
  • 代码运行,出现菜单,但是当我点击菜单时,什么也没有发生。 PS Scouting 课程确实有效,因为它在我添加菜单之前就有效,而且我根本没有更改它。
  • 我很确定这与警告“类是原始类型。对泛型类型 Class 的引用应该参数化”有关。问题是我不知道这意味着什么或如何“参数化”类。
【解决方案2】:

首先,从清单中删除 .Scouting.Login&lt;intent-filter&gt; 部分(将 .splash_screen) 保留一个部分。除非您需要从第 3 方启动任何 Activity 类( external) 应用程序,没有必要声明基于操作的 &lt;intent-filter&gt; 部分 - 这也不是好的做法。

其次,按照 wtsang02 的建议,将 classes 字符串数组更改为...

String classes[] = {"Scouting","Login","splash_screen"};

另外,假设其他 Activity 类(例如 Scouting 等)与 Menu 在同一个包中,请更改此行...

String cheese= "com.cody.graham."+classes[position];

成为……

String cheese= "scouting.form." +classes[position];

...为了摆脱日食警告,这条线...

Class cvar=Class.forName(cheese);

...到...

Class<?> cvar=Class.forName(cheese);

【讨论】:

  • 它仍然没有做任何事情:(
  • @bluebl1 :我在您发表评论之前进行了编辑。重新检查我的代码更改建议,并确保您为 cheese 字符串使用了正确的包名称。
  • 我想知道如何删除意图过滤器并仍然使用“com.cody.graham”。但我仍然有意图过滤器,因为我确实使用了一点。
  • @bluebl1 :要使用&lt;intent-filter&gt; 操作,您需要以不同的方式创建Intent,并且不要指定ContextClass&lt;?&gt; 部分。相反,您只需将字符串传递给Intent 构造函数以指定操作。示例 - Intent intention=new Intent("com.cody.graham.SCOUTING"); 可以工作,但这称为“隐式意图”。当指定要使用的Class&lt;?&gt; 参数时,它是一个“显式意图”。 &lt;intent-filter&gt; 部分中的操作字符串可以是任何字符串 - 但是,用于显式意图的 Class&lt;?&gt; 必须具有完全限定的包名称等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
相关资源
最近更新 更多