0

さて、まず最初に、約 2 日前に Java を学び始めました (しようとしています)。インストールされているすべてのアプリケーション (activityInfo.loadLabel) を一覧表示するアプリケーションを作成しようとしていて、項目のクリック (activityInfo.packageName) でアプリケーションを起動したいのですが、これらを AppItems のリストに保存しています。

class AppItem{
    String _appname;
    public String getAppname(){return _appname;};
    public void setAppname(String value){_appname = value;};
    String _app;
    public String getApp(){ return _app; };
    public void setApp(String value){_app = value; };
}

リストビューに文字列の配列を追加できます。しかし、リストビューで(いわば)同じ行に2つの異なる値を追加するにはどうすればよいですか-Javaで。私の質問が理解できない場合は教えてください - そして私は可能な限り詳しく説明しようとします

ここに私のコードがあります:

ArrayList<AppItem> apps;
    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        final List<ResolveInfo> pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0);
        AppItem appItem = new AppItem();
        for (ResolveInfo applicationInfo : pkgAppsList) {
            appItem._appname = (String) applicationInfo.activityInfo.loadLabel(getPackageManager());
            appItem._app= applicationInfo.activityInfo.packageName;
            apps.add(appItem);
        }

        ArrayAdapter<AppItem> adapter = new ArrayAdapter<AppItem>(this,android.R.layout.simple_list_item_1,apps);

        ListView listView = new ListView(this);     
        listView.setAdapter(adapter);
         setContentView(listView);

         listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                String item = ((TextView)view).getText().toString();            
                Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();

            }
        });

    }
class AppItem{
    String _appname;
    public String getAppname(){return _appname;};
    public void setAppname(String value){_appname = value;};
    String _app;
    public String getApp(){ return _app; };
    public void setApp(String value){_app = value; };
}

または使用する代替手段はありますか

Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
startActivity(LaunchIntent);

ラベル名からアプリケーションを起動できますか?

4

2 に答える 2

1

ArrayAdapter は、指定AppItem.toString()したレイアウトでコンテンツを表示します。

toString() をオーバーライドして、ラベルを表示できます。

public void toString() {
    return _appName;
}

onItemClick で、呼び出してアイテムを取得できます

AppItem item = (AppItem) parent.getItemAtPosition(position);

または、appItem がアクセス可能である場合 (メソッドへのローカル変数ではなく、final またはアクティビティのフィールド)

apps.get(position);

その後、パッケージを取得してアクティビティを呼び出すことができます:

Intent intent = getPackageManager().getLaunchIntentForPackage(item.getAapp());
于 2013-01-15T13:06:22.987 に答える
1

行の独自のレイアウト (任意の数の要素を保持できます) を定義してからgetView()、アダプターでオーバーライドし、レイアウトを膨らませて、リストビューが要求したときにそれを返す必要があります。これにより、各行を希望どおりに表示したり、データ型に応じて各行を異ならせたりすることができます (何をgetView()返すかは完全にあなた次第です - リスト ビューにはアダプターが返すものだけが表示されます)。これは非常に基本的なものであるため、文字通り Android ListView チュートリアルでコードが提供されるため、ここではコードを提供しません。

ランダムに見つけたチュートリアル:ここまたはここ

于 2013-01-15T12:42:51.110 に答える