Java 我无法将我的活动扩展到listactivity。需要帮助

Java 我无法将我的活动扩展到listactivity。需要帮助,java,android,android-intent,android-listview,Java,Android,Android Intent,Android Listview,我无法将我的活动扩展到listactivity。我想将其扩展到listactivity,并将onclicklistener添加到列表项中 public class MainActivity extends Activity { private ListView lView; private ArrayList results = new ArrayList(); @Override protected void onCreate(Bundle savedIns

我无法将我的活动扩展到listactivity。我想将其扩展到listactivity,并将onclicklistener添加到列表项中

public class MainActivity extends Activity {

    private ListView lView;
    private ArrayList results = new ArrayList();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lView = (ListView) findViewById(R.id.lvApps);
        PackageManager pm = this.getPackageManager();

        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);

        List < ResolveInfo > list = pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED);
        for (ResolveInfo rInfo: list) {
            results.add(rInfo.activityInfo.applicationInfo
                .loadLabel(pm).toString());
            Log.w("Installed Applications", rInfo.activityInfo.applicationInfo
                .loadLabel(pm).toString());
        }
        lView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, results));
    }
}
公共类MainActivity扩展活动{
私有列表视图lView;
private ArrayList results=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lView=(ListView)findviewbyd(R.id.lvApps);
PackageManager pm=this.getPackageManager();
意图=新意图(Intent.ACTION\u MAIN,空);
intent.addCategory(intent.CATEGORY_启动器);
ListList=pm.querytentActivities(intent,PackageManager.PERMISSION_已授予);
对于(ResolveInfo-rInfo:list){
结果.添加(rInfo.activityInfo.applicationInfo)
.loadLabel(pm.toString());
Log.w(“已安装的应用程序”,rInfo.activityInfo.applicationInfo
.loadLabel(pm.toString());
}
setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,results));
}
}

如果要使用
列表活动
,则不需要此行:

ListView lView = (ListView) findViewById(R.id.lvApps);
但是当前引用的特定
列表视图
必须将其id更改为

<ListView
  android:id="@android:id/list"
.....

使用以下代码:

    public class MainActivity extends ListActivity implements OnItemClickListener{

    private ArrayList results = new ArrayList();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//            setContentView(R.layout.activity_main);

        PackageManager pm = this.getPackageManager();

        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);

        List < ResolveInfo > list = pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED);
        for (ResolveInfo rInfo: list) {
            results.add(rInfo.activityInfo.applicationInfo
                .loadLabel(pm).toString());
            Log.w("Installed Applications", rInfo.activityInfo.applicationInfo
                .loadLabel(pm).toString());
        }
                getListView().setOnItemClickListener(this);

        setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, results));
    }

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub

}

}
public类MainActivity扩展了ListActivity实现了ListListener{
private ArrayList results=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
PackageManager pm=this.getPackageManager();
意图=新意图(Intent.ACTION\u MAIN,空);
intent.addCategory(intent.CATEGORY_启动器);
ListList=pm.querytentActivities(intent,PackageManager.PERMISSION_已授予);
对于(ResolveInfo-rInfo:list){
结果.添加(rInfo.activityInfo.applicationInfo)
.loadLabel(pm.toString());
Log.w(“已安装的应用程序”,rInfo.activityInfo.applicationInfo
.loadLabel(pm.toString());
}
getListView().setOnItemClickListener(此);
setListAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,results));
}
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){
//TODO自动生成的方法存根
}
}
解释:

ListActivity有一个默认布局,该布局由位于屏幕中心的单个全屏列表组成。因此,您可以直接设置适配器

看一看以供参考


我希望这会有帮助

实现MClickListener

public class MainActivity extends ListActivity implements OnItemClickListener
{
   //your code;

    @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
    // TODO Auto-generated method stub
    results.get(pos);  //this will give you the value in the clicked list item as per your code
}
}
public类MainActivity扩展了ListActivity实现了ListListener
{
//你的代码;
@凌驾
公共链接(AdapterView arg0、视图arg1、内部位置、长arg3){
//TODO自动生成的方法存根
results.get(pos);//这将根据您的代码给出单击列表项中的值
}
}

出现了什么错误?在公共类MainActivity extends Activity中使用extends ListActivity只要我有“公共类MainActivity extends Activity”代码运行良好,但当我尝试将其更改为“公共类MainActivity extends ListActivity”时,我就可以使用“onListItemClick”(ListView l,View v,int position,long id)“要访问listitem的位置,我得到错误”java.lang.RuntimeException:无法启动活动组件信息您的内容必须有一个id属性为“android.R.id.list”的ListView”。布局中的ListView id必须设置为android:id=“@android:id/list”这就是listactivity知道如何找到ListView的方式如果您使用的是带有列表视图的布局,则不必扩展listactivity您可以扩展活动,您可以执行ListView ListView=(ListView)findViewById(R.id.yourlayout);ListView.setOnItemClickListener(This);如果要扩展ListActivty,则不必使用ListView.05-15 17:19:52.383:E/AndroidRuntime(6370):java.lang.RuntimeException:无法启动活动组件信息{com.ku.installedapps/com.ku.installedapps.MainActivity}:java.lang.RuntimeException:您的内容必须有一个id属性为“android.R.id.list”的ListView。如果您想使用listactivity,根据我的回答,您不需要xml文件中的ListView,但您的错误表明您的xml文件中已经有一个ListView,它没有id,如
android:id=“@android:id/list”
。请查看Manish Android给出的答案,或者参考与我的答案链接的
文档。我的xml文件和我没有任何xml列表视图,正如你所看到的,但我仍然收到错误java.lang.RuntimeException:无法启动activity ComponentInfo{com.ku.installedapps/com.ku.installedapps.MainActivity}:java.lang.RuntimeException:您的内容必须具有id属性为“android.R.id.list”的ListView:(@mehhance:检查我的更新答案,您需要避免
setContentView(R.layout.activity\u main);
否则系统将转到该xml文件以查找id为的listview
android:id=“@android:id/list”
Thankyou…问题已解决。问题是由于setcontentview:)引起的。再次感谢