[英]Need to Open an Intent from a String Source
我在這里面臨挑戰。 我創建了一個列表(在 listView 中),當我選擇一個(該列表的)項目時,它返回一個字符串。 我需要用這個字符串打開一個新屏幕。
讓我嘗試解釋一下:此列表包含以下內容(此處僅顯示一小部分):
"ACTION_SETTINGS", "ACTION_SHOW_REGULATORY_INFO", "ACTION_SOUND_SETTINGS", "ACTION_STORAGE_VOLUME_ACCESS_SETTINGS", "ACTION_APPLICATION_DETAILS_SETTINGS",
"ACTION_SYNC_SETTINGS", "ACTION_USAGE_ACCESS_SETTINGS", "ACTION_USER_DICTIONARY_SETTINGS" blablabla...
實際上像上述選項一樣有一百多個選項。 這些選項是特定的配置選項。 因此,當我單擊其中一個選項時,它應該打開“特定配置屏幕”。
如果我這樣做它可以工作,但我想要的是從列表中選擇而不是這樣:
Intent intent = new Intent(android.provider.Settings.ACTION_SOUND_SETTINGS);
startActivity(intent);
// 以上是執行此操作的“靜態”方式(但有效)
我想要的是一種“動態”的方式來做到這一點。
就像是:
String novaTela = "android.provider.Settings." + listaConf.getItemAtPosition( i ).toString();
// above listaConf is my ListView
Intent intent = new Intent(novaTela);
我已經嘗試解析但從未工作過。 像這樣的東西:
Intent intent = Intent.parseIntent(sIntent); // I don't know it is possible
如果我使用這樣的“固定參數”:
Intent intent = new Intent(android.provider.Settings.ACTION_SOUND_SETTINGS);
startActivity(intent);
那行得通...但是如果我嘗試這樣的“動態”方式:
String novaTela = "android.provider.Settings." + listaConf.getItemAtPosition( i ).toString();
Intent intent = new Intent(novaTela);
我收到一個錯誤:
未找到處理 Intent 的活動
{act=android.provider.Settings.ACTION_SOUND_OPTIONS}
有人可以幫我嗎?
實際上你從這條線上得到了什么
String setting = android.provider.Settings.ACTION_SETTINGS;
是
"android.settings.SETTINGS"
直接傳入Intent
就可以了:
Intent intent = new Intent("android.settings.SETTINGS");
startActivity(intent);
所以這應該可以解決您的問題:
String novaTela = listaConf.getItemAtPosition( i ).toString().replace("ACTION_","android.settings.");
Intent intent = new Intent(novaTela);
好吧,我的朋友 Myo (dguy) 幫助我並找到了最終解決方案。 代碼如下:
// adiciona o clique na lista
listaConf.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
// current String from your list
String current = listaConf.getItemAtPosition( i ).toString();
/* pega o item selecionado na ListView */
txtConf.setText(current);
try{
// By java refelection, get the actual String from "android.provider.Settings" class to pass into Intent
Field f = android.provider.Settings.class.getField(current);
String setting = (String)f.get(null);
/* passa o item para a Intent */
Intent intent = new Intent(setting);
/* bloco para evitar que o app pare por erro */
startActivity(intent);
} catch (Exception e ){
Toast.makeText(MainActivity.this, "ERRO: " + e.getMessage().toString(), Toast.LENGTH_SHORT).show();
}
}
});
這按我需要的方式工作,我發布它是因為可能對某人有用。 再次感謝 Myo (dguy)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.