Java 需要从字符串源打开意图

Java 需要从字符串源打开意图,java,android,android-studio,Java,Android,Android Studio,我在这里面临一个挑战。我创建了一个列表(在列表视图中),当我选择一个项目(这个列表)时,它返回一个字符串。我需要用这个字符串打开一个新屏幕 让我试着解释一下:这个列表包含以下内容(这里只显示了一小部分): 事实上,像上述选项一样,有一百多个选项。这些选项是特定的配置选项。因此,当我单击其中一个选项时,它应该会打开“特定配置屏幕” 如果我这样做,它会工作,但我想要的是从列表中选择,而不是这样: Intent intent = new Intent(android.provider.Settings

我在这里面临一个挑战。我创建了一个列表(在列表视图中),当我选择一个项目(这个列表)时,它返回一个字符串。我需要用这个字符串打开一个新屏幕

让我试着解释一下:这个列表包含以下内容(这里只显示了一小部分):

事实上,像上述选项一样,有一百多个选项。这些选项是特定的配置选项。因此,当我单击其中一个选项时,它应该会打开“特定配置屏幕”

如果我这样做,它会工作,但我想要的是从列表中选择,而不是这样:

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 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);
我得到一个错误:

未找到可处理意图的活动
{act=android.provider.Settings.ACTION\u SOUND\u OPTIONS}


有人能帮帮我吗?

你从这条线上得到了什么

String setting=android.provider.Settings.ACTION\u设置;

“android.settings.settings”
可以直接将其传递到
Intent
中:

Intent Intent=newintent(“android.settings.settings”);
星触觉(意向);
因此,这应该可以解决您的问题:

String novaTela=listaConf.getItemAtPosition(i).toString().replace(“ACTION_”,“android.settings”);
意向=新意向(诺瓦特拉);

你从这一行得到了什么

String setting=android.provider.Settings.ACTION\u设置;

“android.settings.settings”
可以直接将其传递到
Intent
中:

Intent Intent=newintent(“android.settings.settings”);
星触觉(意向);
因此,这应该可以解决您的问题:

String novaTela=listaConf.getItemAtPosition(i).toString().replace(“ACTION_”,“android.settings”);
意向=新意向(诺瓦特拉);
好吧,我的朋友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();
                }
            }
        });
//adiciona o clique na lista
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
//列表中的当前字符串
字符串current=listaConf.getItemAtPosition(i).toString();
/*pega o项目选择na列表视图*/
txtConf.setText(当前);
试一试{
//通过java refelection,从“android.provider.Settings”类中获取实际字符串以传递到Intent中
字段f=android.provider.Settings.class.getField(当前);
字符串设置=(字符串)f.get(null);
/*第o项第a款意图*/
意图=新意图(设置);
/*这是一个很好的例子*/
星触觉(意向);
}捕获(例外e){
Toast.makeText(MainActivity.this,“ERRO:+e.getMessage().toString(),Toast.LENGTH_SHORT).show();
}
}
});
这正是我所需要的,我之所以发布它,是因为它可能对某些人有用。 Thaks Myo(dguy)

我的朋友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();
                }
            }
        });
//adiciona o clique na lista
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
//列表中的当前字符串
字符串current=listaConf.getItemAtPosition(i).toString();
/*pega o项目选择na列表视图*/
txtConf.setText(当前);
试一试{
//通过java refelection,从“android.provider.Settings”类中获取实际字符串以传递到Intent中
字段f=android.provider.Settings.class.getField(当前);
字符串设置=(字符串)f.get(null);
/*第o项第a款意图*/
意图=新意图(设置);
/*这是一个很好的例子*/
星触觉(意向);
}捕获(例外e){
Toast.makeText(MainActivity.this,“ERRO:+e.getMessage().toString(),Toast.LENGTH_SHORT).show();
}
}
});
这正是我所需要的,我之所以发布它,是因为它可能对某些人有用。
又是萨克斯迈奥(dguy)

嘿,弗拉维奥,欢迎来到SO!我觉得你可以通过添加你得到的错误来改进你的问题,只要看看你的代码我就看不到任何问题。失败的是哪一行?实际的错误是什么?谢谢如果我和“固定参数”一起使用,比如:Intent Intent=newintent(android.provider.Settings.ACTION\u SOUND\u Settings);星触觉(意向);这很有效。。。但是如果我像这样尝试我的“dinamic”方式:String novaTela=“android.provider.Settings.”+listaConf.getItemAtPosition(I.toString();//上面的listaConf是我的ListView意向=新意向(novaTela);它给了我一个错误:没有找到处理意图的活动{act=android.provider.Settings.ACTION\u SOUND\u OPTIONS}非常感谢。嘿,弗拉维奥,欢迎来到SO!我觉得你可以通过添加你得到的错误来改进你的问题,只要看看你的代码我就看不到任何问题。失败的是哪一行?实际的错误是什么?谢谢如果我和“固定参数”一起使用,比如:Intent Intent=newintent(android.provider.Settings.ACTION\u SOUND\u Settings);星触觉(意向);这很有效。。。但如果我尝试我的“迪纳米克”wa