1

我正在尝试使用 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>
4

2 回答 2

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

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

还尝试更改您的清单:

<activity android:name=".Scouting" />
这是你在这种情况下只需要的。

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

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

欲了解更多信息:链接

于 2012-11-08T23:20:50.560 回答
1

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

其次,按照 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);
于 2012-11-09T00:27:17.117 回答