0

私はアンドロイド開発が初めてなので、皆さんの助けが必要です。インターネット全体を検索しましたが、解決策が見つからなかったので、最終的にここに投稿することにしました...私は初心者なので、できるだけ多くの情報を教えてください。

これが私がやっていることです...

アクティビティテストのボタンはほとんどありません。ユーザーがボタンを長押しすると、

(MAIN_ACTIVITY)インストールされているすべてのアプリのリスト。ユーザーがアプリを選択すると、

それぞれのパッケージ名と TEST アクティビティに戻ります。ユーザーがボタンをクリックすると、新しいアプリが開きます(テストアクティビティに戻る前に選択されていました)。

ショートカットでは、ユーザーは(アプリリンク、アイコン、タイトル)のようにボタンを動的に編集できる必要があります。

ここに私の問題があります...

上記を達成できましたが、1つのボタンでしか機能しません。つまり、他のボタンも同じことをします。そして、これは私を夢中にさせています... XMLコードが必要な場合は、お知らせください。よろしくお願いします。

テスト活動

package com.example.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.ListView;

public class Test extends Activity implements OnLongClickListener,
    OnClickListener {

final int APPLIST_REQUEST_CODE = 12345;
final int APPLIST_REQUEST_CODE2 = 2;

String pac, pac2;

private ListView mListAppInfo;
Button bBrowser, bCalculator, bExit;

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

    bBrowser = (Button) findViewById(R.id.bBrowser);
    bExit = (Button) findViewById(R.id.bExit);
    bCalculator = (Button) findViewById(R.id.bCalculator);

    bBrowser.setOnClickListener(this);
    bBrowser.setOnLongClickListener(this);

    bCalculator.setOnClickListener(this);
    bCalculator.setOnLongClickListener(this);

    bExit.setOnClickListener(this);
}

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub
    switch (arg0.getId()) {
    case R.id.bBrowser:
        Intent i = getPackageManager().getLaunchIntentForPackage(pac);
        startActivity(i);

        break;
    case R.id.bCalculator:
        Intent i1 = getPackageManager().getLaunchIntentForPackage(pac2);
        startActivity(i1);

        break;
    case R.id.bExit:
        finish();
        break;
    }
}

@Override
public boolean onLongClick(View arg0) {
    // TODO Auto-generated method stub
    switch (arg0.getId()) {
    case R.id.bBrowser:
        Intent a = new Intent("android.intent.action.APP_LIST");
        startActivityForResult(a, APPLIST_REQUEST_CODE);

        break;
    case R.id.bCalculator:
        Intent a2 = new Intent("android.intent.action.APP_LIST");
        startActivityForResult(a2, APPLIST_REQUEST_CODE2);

        break;
    }
    return false;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == APPLIST_REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            pac = data.getStringExtra("key");
        }
    } else if (requestCode == APPLIST_REQUEST_CODE2) {
        if (resultCode == Activity.RESULT_OK) {
            pac2 = data.getStringExtra("key");
        }
    }

}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    // super.onBackPressed();
}
}

主な活動

package com.example.test;

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

public class MainActivity extends Activity {
private ListView mListAppInfo;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_main);

    mListAppInfo = (ListView) findViewById(R.id.lvApps);
    AppInfoAdapter adapter = new AppInfoAdapter(this,
            Utilities.getInstalledApplication(this),     getPackageManager());
    mListAppInfo.setAdapter(adapter);

    mListAppInfo.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int pos,
                long id) {
            AppInfoAdapter appInfoAdapter = (AppInfoAdapter) parent
                    .getAdapter();
            ApplicationInfo appInfo = (ApplicationInfo) appInfoAdapter
                    .getItem(pos);



            Intent a = new Intent();
            a.putExtra("key", appInfo.packageName);
            setResult(Activity.RESULT_OK, a);
            finish();

        }
    });
}

}
4

1 に答える 1

1

まず第一に、アクティビティの移行は論理的に間違っています。活動と結果について読む。MainActivityserveTestであるため、結果を求めてTest開始し、その結果をviaに返す必要があります。代わりにやっていることは次のとおりです。MainActivityMainActivityTestonActivityResult

Test -> new MainActivity -> new Test

それはあるべきですが:

Test -> new MainActivity -> back to the old Test

ボタンの問題については、 と の両方が同じことbCalculatorbBrowser行い、 で選択したパッケージを開始する必要がありますMainActivity。では両方のボタンがまったく同じことを行うのに、onClickなぜ異なる動作をする必要があるのでしょうか?

編集:

では、次Testのように呼び出しますMainActivity

final int APPLIST_REQUEST_CODE = 12345;
Intent a = new Intent("android.intent.action.APP_LIST");
startActivityForResult(a, APPLIST_REQUEST_CODE);

ではMainActivity、次のように結果を返します。

Intent a = new Intent();
a.putExtra("key", appInfo.packageName);
setResult(Activity.RESULT_OK, a);
finish();

に戻るとTest、次のように結果が得られます。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == APPLIST_REQUEST_CODE) {
        if(resultCode == Activity.RESULT_OK) {
            String packageName = data.getStringExtra("key", "");
        }
    }
}

編集 2:パッケージ アイコンの取得と表示:

アイコン リソース ID とパッケージ名を結果インテントに追加します。

a.putExtra("icon", appInfo.icon);
a.putExtra("packageName", appInfo.packageName);

この方法でアイコンを取得します。

int iconID = data.getIntExtra("icon", -1);
Drawable icon = getApplicationContext().getPackageManager().getResourcesForApplication(data.getStringExtra("packageName", "")).getDrawable(iconID);
bCalculator.setBackground(icon);
于 2013-07-04T19:49:14.983 に答える