如何将数据传递到我的应用程序中的 activity?

How can I pass data to the activity in my app?

如果我按下通过长按文本出现的共享按钮,我想将文本发送到我的应用程序的其他活动。我转到另一个 activity,但我想要的文本没有送达。有什么问题?

这是activity的代码,写着我要传递的文字

public class MainActivity 扩展 AppCompatActivity {

EditText editText;
Intent sendIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = (EditText) findViewById(R.id.editText);
    sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_VIEW);
    editText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sendIntent.putExtra("TEXT", editText.getText().toString());
            sendIntent.setType("text/*");
        }
    });
}

} 这是我的 xml 代码的意图过滤器。

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <action android:name="android.intent.action.MAIN"/>

    <category android:name="android.intent.category.LAUNCHER" />
    <data android:mimeType = "text/*"/>
</intent-filter>

这是接收 activity 意图的部分,我想从中接收数据。

Intent receiveIntent = getIntent(); url = receiveIntent.getStringExtra("文本");

webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(url); 这是 activity 的 xml 代码的意图过滤器部分,我想在其中接收数据。

<activity android:name=".MyWebBrowser"
    android:label="MyWebBrowser">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />


    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/*"/>
    </intent-filter>

这里有一个简单的例子供您参考:

我没有长按 editText,而是简单地使用了一个按钮,但是,逻辑几乎保持不变:

// 主活动。从这里我们将文本从 EditText 发送到 SecondActivity。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        EditText editText = findViewById(R.id.editText);
        Intent intent = new Intent(this, SecondActivity.class);
        intent.setAction("MyIntentAction");

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                intent.putExtra("TEXT", editText.getText().toString());
                startActivity(intent);
                finish();
            }
        });
    }
}

// 第二个活动。从 MainActivity 接收并显示文本。

    public class SecondActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
    
            TextView textView = findViewById(R.id.textView);
    
            Intent intent = getIntent();
            if(intent.getAction().equals("MyIntentAction")) {
                String str = intent.getStringExtra("TEXT");
                textView.setText(str);
            }
    
        }
    }

// 对于长点击检测,在 MainActivity 中添加如下代码:

editText.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                intent.putExtra("TEXT", editText.getText().toString());
                startActivity(intent);
                finish();
                return true;
            }
        });

我看到您在清单中使用两个 activity has LAUNCHERMAIN。请在 manifest.

中只使用一个

要将数据传递给您应用中的另一个 activity,您可以尝试使用 startActivity 并将您的数据放入意图数据中:

  • 打开MyWebBrowser:

    val intent = Intent(context, MyWebBrowser::class.java)
    intent.putExtra("TEXT", yourtext)
    startActivity(intent)
    
  • 获取 MyWebBrowser 中的文本:

    override fun onCreate(savedInstanceState: Bundle?) {
       ...
       val TEXT = intent.getStringExtra("TEXT")
       textView.text = TEXT
    }