2014-01-27 56 views
0

我有一個對話框,打開可顯示已安裝的可啓動應用程序。我在GridView中顯示它們,並在GridItemClick上啓動該活動。在android中,如何將信息從一個活動(對話框)傳遞給另一個?

我該如何讓它不是啓動關聯的應用程序,而是將它們從我的自定義對話框添加到包含啓動對話框的按鈕的片段以及應用程序名稱?又名製作快捷方式到另一個應用程序。

我認爲什麼是相關位是我的項目單擊:

@Override 
public void onGridItemClick(GridView g, View v, int position, long id) { 
    AppModel app = (AppModel) getGridAdapter().getItem(position); 
    if (app != null) { 
     Intent intent = getActivity().getPackageManager() 
       .getLaunchIntentForPackage(app.getApplicationPackageName()); 

     if (intent != null) { 
      startActivity(intent); 
     } 
    } 
} 

而且,我怎麼能夠使應用程序記住的被添加了什麼?我不希望用戶必須重新添加上次啓動應用時添加的任何內容。

回答

2

由於您使用的是從中調用對話框的單個活動,因此此解決方案可能有效。

在您的活動創建所選應用程序的靜態變量,一個多爲應用程序名稱

public static string app_pkg = null; 
public static string app_name = null; 

創建活動爲您提供按鈕是展示所選應用的文本,並在用戶單擊該按鈕時啓動它。讓你的按鈕的應用程序點擊靜態以同樣的方式。最初,隱藏那個按鈕來看。

然後使用,

@Override 
public void onGridItemClick(GridView g, View v, int position, long id) { 
AppModel app = (AppModel) getGridAdapter().getItem(position); 
if (app != null) { 

    ActivityName.app_pkg = app.getApplicationPackageName().toString(); 
    ActivityName.app_name = app.getApplicationName().toString(); //not sure about this statement for the class AppModel (it will be something similar to this, just check 
    ActivityName.button_name.setText(ActivityName.app_name); //Set the button with selected app name here 
    // unhide your button here 
    //dismiss your grid here 
} 

    } 
} 

而在你的活動,在按鈕的onclick方法,啓動意圖

submit.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
if (!app_pkg.equals(null)) { 
    Intent lock = new Intent(getActivity(),app_pkg); 

    if (intent != null) { 
     startActivity(intent); 
    } 
} 

} 

    }); 

注:這是不可取的,當你有多個活動,因爲靜態變量可能會導致內存泄漏,因爲它們不會被垃圾收集器正常收集,並且當該靜態變量所屬的活動被破壞時可能會出現異常。

但是既然你有一個非常簡單的流程和只有三個這樣的變量,這應該很好。

+0

我覺得我不能感謝你,因爲願意幫助教育我在這個問題上。 如果我理解正確,app_pkg將應用程序名稱存儲爲字符串,然後將該按鈕上的文本設置爲應用程序名稱。正確?在onClick它將啓動所述應用程序。 我會遇到的問題是,它仍然只是一個單一的按鈕。我想用盡可能多的應用程序填充我的片段,用戶可以在新的gridview中添加儘可能多的應用程序。 糾正簡單。一個FragmentActivity與幾個動態片段與自定義onClick方法來從Fragment - > Activity進行交互。 – Carl

+0

app_pkg將存儲應用程序的*包名稱*,而不是* app-name *。軟件包名稱在同一應用程序的不同版本中更加一致,因此如果您想要使用長時間保持不變的參數,軟件包名稱就可以符合要求。我在編輯我的答案。您可以同樣獲取應用程序名稱本身來設置按鈕名稱。但是你仍然需要應用程序的*包名*來啓動它。 – SoulRayder

+0

所以你在說,假設用戶在gridview中點擊了多個選項,它應該在你的活動中作爲單獨的按鈕彈出? – SoulRayder

相關問題