我无法完成ListActivity,因为我无法在ListItemClick上打开不同的活动。如何使用Class.forName调用类?

时间:2017-01-18 12:17:36

标签: java android

所以我在完成列表活动时遇到了麻烦。基本上问题是,当我点击列表中的项目时,说MainActivity没有任何反应。我尝试更改数组适配器中的值名称,但似乎没有任何工作。 清单xml文件有问题吗?

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[]={ "Mainactivity","Textplay","example2","example3","example4","example5","example6"};

    @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);
        try
        {   
            Class myclass=Class.forName("com.hello.myproject. " +classes[position]);//Path is give to whatever list item was clicked
            Intent myintent=new Intent(Menu.this, myclass);
            startActivity(myintent);
        }
        catch (ClassNotFoundException  e)
        {
            e.printStackTrace();
        }
    }
}

清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hello.myproject">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".splash">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="com.hello.myproject.MAINACTIVITY" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity android:name=".Menu">
            <intent-filter>
                <action android:name="com.hello.myproject.MENU" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity android:name=".TextPlay">
            <intent-filter>
                <action android:name="com.hello.myproject.TEXTPLAY" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>

更新 抱歉浪费了所有人的时间。解决方案非常简单。

1 个答案:

答案 0 :(得分:0)

使用Class[] activities,而不是字符串数组。

然后,您不使用字符串连接,并且您需要确保已经定义了这些活动类。

如果仍然出现错误,则必须在清单

中声明这些类

此外,这些不应全部为MAINACTIVITY","TEXTPLAY"。这些在您的清单中不是有效的类名。

你似乎误解了<intent-filter>的作用。您只需要定义一个<activity>标记,并且startActivity使用

的那个名称值