A teď bych měl dotaz z jiného soudku. Základy jsem studoval ze seriálu na Zdrojáku. Rád bych se zeptal, jakým způsobem řešíte fragmenty ve spojitosti s activity.
V tom tutoriálu (
http://www.zdrojak.cz/clanky/vyvijime-pro-android-fragmenty-a-sqlite-databaze/) je totiž pro variantu "malé" obrazovky použita sólo aktivita pro fragment s formulářem a sólo aktivita pro zobrazení detailu (a samozřejmně hlavní aktivita). Oproti tomu v dokumentaci (
http://developer.android.com/training/basics/fragments/communicating.html) používají pouze jednu hlavní aktivitu pro všechny fragmenty.
Kdybych nepoužil fragmenty, tak je jasné, že pro každou zmíněnou akci budou sólo aktivity. Jakým způsobem je tedy lepší fragmenty začleňovat do aktivity? Na jednu stranu pokud je mám všechny v jedné aktivitě, tak bude jednodušší komunikace mezi fragmenty, na druhou stranu, kdyby byla aplikace rozsáhlejší, tak mít všechno v jedné aktivitě je podle mě taky nesmysl.
Dá se tedy říci, že pro malé aplikace se dá použití varianta jedné aktivity pro všechny fragmenty a pro větší aplikace (co je větší aplikace?) pak rozdělení na více aktivit?
Právě řeším v té jednoduché aplikaci to, že fragmenty mám ve více aktivitách a potřebuju při výběru položky ze seznamu (hlavní aktivita) otevřít formulář a naplnit ho daty z DB - což je až ve fragmentu, ale v jiné aktivitě. Takže pokud aktivita pro zobrazení fragmentu s formulářem vypadá takto:
public class AddRecordActivity extends FragmentActivity implements
AddRecordFragment.OnAddRecordListener {
public static final String EXTRA_DATE = "date";
public static final String EXTRA_DAILY_COUNTER = "dailyCounter";
public static final String EXTRA_MAIN_COUNTER = "mainCounter";
public static final String EXTRA_DESCRIPTION = "description";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_record_container);
}
@Override
public void onAddRecord(Record record) {
Intent result = new Intent();
result.putExtra(EXTRA_DATE, record.dateInMillis);
result.putExtra(EXTRA_DAILY_COUNTER, record.dailyCounter);
result.putExtra(EXTRA_MAIN_COUNTER, record.mainCounter);
result.putExtra(EXTRA_DESCRIPTION, record.description);
setResult(RESULT_OK, result);
finish();
}
}
a v hlavní aktivitě se tato aktivita otevírá takto:
Intent i = new Intent(this, AddRecordActivity.class);
i.putExtra(AddRecordActivity.EXTRA_DATE, record.dateInMillis);
i.putExtra(AddRecordActivity.EXTRA_DAILY_COUNTER, record.dailyCounter);
i.putExtra(AddRecordActivity.EXTRA_MAIN_COUNTER, record.mainCounter);
i.putExtra(AddRecordActivity.EXTRA_DESCRIPTION, record.description);
startActivityForResult(i, REQUEST_UPDATE_RECORD);
tak tam budu muset dělat dalšího prostředníka pro přenesení dat do fragmentu.