[英]How can I pass data to the activity in my app?
如果我按下通過長按文本出現的共享按鈕,我想將文本發送到我的應用程序的其他活動。 我轉到另一項活動,但我想要的文本未送達。 問題是什么?
這是編寫我要傳遞的文本的活動的代碼。
公共類 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>
這是接收我想要從中接收數據的活動意圖的部分。
意圖 receiveIntent = getIntent(); url = receiveIntent.getStringExtra("TEXT");
webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(url); 這是我要接收數據的活動的 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;
}
});
我看到您在清單中使用了兩個LAUNCHER
和MAIN
活動。 請在您的manifest
僅使用一個。
要將數據傳遞給應用中的另一個 Activity,您可以嘗試使用startActivity
並將數據放入 Intent 數據中:
打開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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.