使用putExtra和getExtra发送数据

时间:2017-11-11 12:46:23

标签: android

我有一个关于在两个活动文件之间发送数据的问题。下面的代码是pdf viewer应用程序的一部分。

主要活动

private void init() {
    lv_pdf = (ListView)findViewById(R.id.lv_pdf);
    dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
    fn_permission();

    lv_pdf.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Intent intent = new Intent(MainActivity.this, PdfActivity.class);
            intent.putExtra("position", i);
            startActivity(intent);
            Log.e("Position", i + "");
        }
    });
}

onItemClick()方法使用PdfActivity.java将主要活动的数据发送到第二个活动(putExtra)。(&#39; position&#39;是pdf文件的索引)

第二项活动

private void init() {
    pdfView = (PDFView)findViewById(R.id.pdfView);
    position = getIntent().getIntExtra("position", 0);

    File pdfFile = new File(Environment.getExternalStorageDirectory(),"PdfFile.pdf");

    if (pdfFile.exists()) {
        Uri path = Uri.fromFile(pdfFile);
        Intent objIntent = new Intent(Intent.ACTION_VIEW);
        objIntent.setDataAndType(path, "application/pdf");
        objIntent.setFlags(Intent. FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(objIntent);
    }

    displayFromSdcard();
}

private void displayFromSdcard() {
    pdfFileName = MainActivity.fileList.get(position).getName();

    pdfView.fromFile(MainActivity.fileList.get(position))
            .defaultPage(pageNumber)
            .enableSwipe(true)
            .swipeHorizontal(false)
            .onPageChange(this)
            .enableAnnotationRendering(true)
            .onLoad(this)
            .scrollHandle(new DefaultScrollHandle(this))
            .load();
}

在第二项活动中,&#39;位置&#39;使用getintExtra()方法获取数据,默认值为0. position变量用于呈现pdf文件。

问题:

&#39;默认值0&#39;是第一个索引号。它表示SD卡上最后保存的文件。但是如果我在app chooser中点击pdf文件,无论点击哪个文件,最后保存的文件都会打开。

如何更改默认值以打开我点击的pdf文件?

以下代码是关于第二个活动文件的manifest.xml文件。

<activity
    android:name=".PdfActivity"
    android:screenOrientation="portrait"
    android:parentActivityName=".MainActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.pdffilefromsdcard.MainActivity" />
    <intent-filter >
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="application/pdf" />
    </intent-filter>
</activity>

我尝试过的事情:

我做了一个额外的变量positionStr,数据类型是字符串并将其放入文件路径,但是当我启动应用程序时,应用程序突然停止。

1 个答案:

答案 0 :(得分:0)

您没有在代码中的任何位置使用kill变量。代码行

position

始终获取相同的pdf文件,因此您应该将File pdfFile = new File(Environment.getExternalStorageDirectory(),"PdfFile.pdf");参数适当地传递到此行以打开所需的文件。