安卓应用程序列表

标签 android android-layout android-intent

我创建了一个应用程序,我想将所有已安装的应用程序列出到自定义 ListView 中。不幸的是, Activity 一开始就崩溃了!谁能帮我解决这个问题!我找不到错误,因为它没有给出任何错误!

AppActivity.java

package com.ex.layout;

import java.util.List;

import android.app.Activity;
import android.content.pm.PackageInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;

public class AppActivity extends Activity implements OnItemClickListener{

String[] name = getaAppName();
String[] packs = getPackName();


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ListView li = (ListView) findViewById(R.id.applist);
    ListviewAdapet list = new ListviewAdapet(this, name, packs);
    li.setAdapter(list);
    li.setOnItemClickListener(this);
}

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {  
    // TODO Auto-generated method stub  
    Toast.makeText(this,"Title => "+name[position]+"=> n Description"+packs[position], Toast.LENGTH_SHORT).show();  
}  

public String[] getaAppName() {
    List<PackageInfo> apps = getPackageManager().getInstalledPackages(0);
    String appname[] = new String[apps.size()];
    for (int number = 0; number < apps.size(); number++) {
        PackageInfo pack = apps.get(number);
        appname[number] = pack.applicationInfo.loadLabel(getPackageManager()).toString();
    }
    return appname;
}

public String[] getPackName(){
    List<PackageInfo> apps = getPackageManager().getInstalledPackages(0);
    String packnames[] = new String[apps.size()];
    for (int i = 0; i < apps.size(); i++) {
        PackageInfo pack = apps.get(i);
        packnames[i] = pack.packageName;
    }
    return packnames;
}

}

这是下一节课!它扩展了 baseadapter 以获得输出。 listviewadapet.java

package com.ex.layout;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class ListviewAdapet extends BaseAdapter{

Activity context;
String[] appname , packname;

public ListviewAdapet(Activity Context, String[] appname , String[] packname) {
    // TODO Auto-generated constructor stub
    super();
    this.appname = appname;
    this.packname = packname;
    this.context = Context;

}

public class Viewholder{
    TextView appname;
    TextView packname;
}

public int getCount(String[] array) {
    // TODO Auto-generated method stub
    int count = array.length;
    return count;
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    Viewholder view;
    LayoutInflater inflator = context.getLayoutInflater();

    if (convertView == null) {
        convertView = inflator.inflate(R.layout.listitem, null);
        view = new Viewholder();
        view.appname = (TextView) convertView.findViewById(R.id.appname);
        view.packname= (TextView) convertView.findViewById(R.id.packagename);
        convertView.setTag(view);
    } else {
        view = (Viewholder) convertView.getTag();
    }

    view.appname.setText(appname[position]);
    view.packname.setText(packname[position]);
    return convertView;
}

public int getCount() {
    // TODO Auto-generated method stub
    return 0;
}

}

请帮帮我! 谢谢。

最佳答案

你在代码中犯了两个严重的错误。

错误 1

String[] name = getaAppName();
String[] packs = getPackName();

您在 onCreate 之前调用这两个方法。记住 getPackageManager 需要 Activity 上下文。如果您在 onCreate 之前定义它,您将得到该死的 NullPointerException

所以改变你的代码

来自

public class AppActivity extends Activity implements OnItemClickListener{

String[] name = getaAppName();
String[] packs = getPackName();


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

public class AppActivity extends Activity implements OnItemClickListener{

    String[] name;
    String[] packs;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        name = getaAppName();
        packs = getPackName();

错误 2

public int getCount() {
    // TODO Auto-generated method stub
    return 0;
}

如果你在这里返回 0,你将得到空列表。

所以改成

public int getCount() {
        return packname.length;
    }

关于安卓应用程序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11282661/

相关文章:

android - 未能将 Intent 结果传递回 Activity ,android 图像捕获 Intent

android - 如何设置android布局以支持所有屏幕尺寸?

java - Android:点击按钮时的新 View

android - 用户输入保存到新 Activity

android - 类型不匹配 : inferred type is androidx. compose.ui.Alignment.Vertical 但预期是 androidx.compose.foundation.layout.Arrangement.Vertical

android - 无法写入 SD 卡

android - 当我更改线性布局的可见性并添加到列表时,所有过去的项目可见性都会改变

java - Android应用程序中的模式输入

android - 如何从另一个应用程序启动 Activity ?

android - 错误 :(26, 13) 无法解析 : com. android.support :appcompat-v7:25. 0.1