0

会社のアプリのコードを更新していますが、約 20 のアクティビティ クラスがあり、すべて PDF をダウンロードし、次のコードを使用して表示します。

public void showPdf()
{
    File file = new File(Environment.getExternalStorageDirectory()+"/pdf/Read.pdf");
    PackageManager packageManager = getPackageManager();
    Intent testIntent = new Intent(Intent.ACTION_VIEW);
    testIntent.setType("application/pdf");
    List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    Uri uri = Uri.fromFile(file);
    intent.setDataAndType(uri, "application/pdf");
    startActivity(intent);
}

コードは機能していますが、20個のクラスすべてに複製されています(私には非常に悪いようです)。各アクティビティクラスがインポートする単一のクラスにコードを入れたいのですが、これをやろうとするgetPackageManager()startActivity(intent)、より長い作業。

これを実現するためにクラスを構成するにはどうすればよいですか? または、これについて間違った方法で行っていますか。

4

2 に答える 2

3

これを実現するためにクラスを構成するにはどうすればよいですか?

ステップ #1: これをユーティリティ クラスの静的メソッドにします。

ステップ #2:Context ctxtパラメータとしてメソッドに追加します。

ステップ #3:に実装されているgetPackageManager()や などのメソッドについては、渡されたパラメーターでそれらを呼び出します。startActivity()Contextctxt

ステップ #4: ファイル パスを作成するために文字列連結を使用するための定規で手首をたたき、正しい方法で行います。

ステップ #5:queryIntentActivities()使用していないコードを削除します。

public static void showPdf(Context ctxt)
{
    File file = new File(Environment.getExternalStorageDirectory(), "/pdf/Read.pdf");
    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.setDataAndType(Uri.fromFile(file), "application/pdf");
    startActivity(intent);
}

ステップ #6: 現在呼び出し中の場所に を呼び出しshowPdf()ますYourUtilityClass.showPdf(this)

于 2013-08-07T16:35:35.757 に答える
1
public class PDFUtlity{
    public static void showPdf(Context context)
    {
        File file = new File(Environment.getExternalStorageDirectory()+"/pdf/Read.pdf");
        PackageManager packageManager = context.getPackageManager();
        Intent testIntent = new Intent(Intent.ACTION_VIEW);
        testIntent.setType("application/pdf");
        List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        Uri uri = Uri.fromFile(file);
        intent.setDataAndType(uri, "application/pdf");
        ((Activity)context).startActivity(intent);
    }
}

public class MyActivity extends Activity{
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      ///.....
      PDFUtlity.showPdf(this);
  }
}
于 2013-08-07T16:36:59.793 に答える