判斷

發表人: 訪客
發表時間: 2011-10-25 21:14:14
當接收一個String 假設為result
則判斷此result
若為 ABC,則跳至 ABC頁面
若為 DEF,則跳至 DEF頁面
除了可以if .. else以及switch .. case 來寫
像是以下
Intent intent = new Intent();
if(rawResult.equals("ABC"))
{
intent.setClass(CaptureActivity.this,ABC.class);
}
intent.setClass(main.this,test.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

請問有沒有辦法可以直接跳至一樣文字串的頁面?
像是以下
Intent intent = new Intent(); intent.setClass(main.this,result.class);//此處若result傳回ABC,則直接跳至ABC頁面
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
試過是無法直接這樣寫,不知道有無其他辦法可以像是這樣判斷的呢?
發表人: Seachaos
積分: 2432
發表時間: 2011-10-27 01:51:19
這個是沒有問題的
這有點類似Class Loader的概念
可以用來動態的加載Android的Activity或其他Class

[sea:javaCode]
Intent i = new Intent();
i.setClass(this, Class.forName("com.test.one.Main2"));
startActivity(i);
[/sea]
發表人: 訪客
發表時間: 2011-10-27 16:09:30
請問回傳值(result)是這樣放嗎?
Intent i = new Intent();
i.setClass(this, Class.forName(result));
startActivity(i);
發表人: Seachaos
積分: 2432
發表時間: 2011-10-30 14:37:48
是的沒錯,但result要是完整的路徑名稱
如 test 這個就是 com.example.text
發表人: 訪客
發表時間: 2011-10-30 21:40:45
你好,所以要寫成
Intent i = new Intent();
i.setClass(this, Class.forName(XXX.XX.result));
startActivity(i);
這樣嗎?
發表人: 訪客
發表時間: 2011-10-30 22:46:37
你好,改成這樣後,它顯示錯誤
說需要加try..catch..
或是加throws宣告
請問是不是要加呢?
發表人: Seachaos
積分: 2432
發表時間: 2011-10-31 01:58:36
Class.forName(String className)
給的是字串

另外try catch是要加上去的
因為有可能會找不到Class而產生Class Not Found Exception
發表人: 訪客
發表時間: 2011-11-01 18:51:49
你好,我改成這樣

[sea:javaCode]
public void handleDecode(String rawResult){
// Display the result
playVibrate();

try
{
Class result = Class.forName(rawResult);
Intent intent = new Intent();
intent.setClass(CaptureActivity.this,result);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
[/sea]

但找不到對應的activity,不知道是哪裡寫錯呢?
發表人: Seachaos
積分: 2432
發表時間: 2011-11-02 08:31:48
你的rawResult是多少?
是完整的Class Path+Name嗎?
發表人: 訪客
發表時間: 2011-11-02 12:26:29
你好,rawResult是從攝像鏡頭讀取文字
然後看rawResult是什麼文字串
就跳到相對的class
好像不是完整的Path+Name..
發表人: Seachaos
積分: 2432
發表時間: 2011-11-04 01:39:20
所以你要把他變成完整的Class Name
看是 "com.path." + rawResult
或 rawResult 直接就是 "com.path.test"
發表人: 訪客
發表時間: 2011-11-06 14:03:28
請問完整的路徑要寫方法的名字嗎?
"package's name . activity's name . fuction's name"+rawResult
還是
"package's name . activity's name"+rawResult
?

不好意思~一直麻煩你。
發表人: Seachaos
積分: 2432
發表時間: 2011-11-08 01:14:31
直接 "packageName." + rawResult(ClassName) 就可以了
例:
packageName = "com.test"
rawResult = "main"
那就會得到
com.test.main <- 這是一個Activity
發表人: 訪客
發表時間: 2011-11-08 17:56:46
你好,非常謝謝!!
已解決。