2015-12-07 1 views
0

У меня есть активность с 4 вкладками (просмотр фрагментов пейджера). У фрагментов есть формы в них, edittexts для записи информации. Я хотел бы использовать элемент меню в своей деятельности для сохранения информации в базе данных и создания файла PDF. Файл создается хорошо, но информация не передается, и он возвращает ошибку ввода-вывода. Я считаю, что база данных также создана, но в ней не хранится информация. Я получаю нуль.Как элемент меню в моей активности получает данные с вкладок (просматривать фрагменты пейджера)?

public void save_final(){ 

    Serv_BaseDataFragment baseFragment = (Serv_BaseDataFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab); 
    baseFragment.serv_insertToBaseData_db(); 

    ServicingFragment serviceFragment = (ServicingFragment)getSupportFragmentManager().findFragmentById(R.id.servicingTab); 
    serviceFragment.insertToServicing_db(); 

    ReplacementFragment replaceFragment = (ReplacementFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab); 
    replaceFragment.insertToReplacement_db(); 

    Toast.makeText(this, "ALL DATA STORED SUCCESSFULLY", Toast.LENGTH_LONG).show(); 
    Intent intent = getIntent(); 
    finish(); 
    startActivity(intent); 


} 

public void writePdf(){ 
    String filename = Serv_BaseDataFragment.sysaid.getText().toString(); 

    Serv_CreatePDF fop = new Serv_CreatePDF(); 

    if (fop.writepdf(filename)) { 
     Toast.makeText(getApplicationContext(), filename + ".pdf created", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(getApplicationContext(), "I/O error", Toast.LENGTH_SHORT).show(); 
    } 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_maintenance, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     Intent intent = new Intent(this, Serv_SettingsActivity.class); 
     startActivity(intent); 
     return true; 
    } 
    if (id == R.id.save_tickets) { 
     save_final(); 
     writePdf(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

ответ

0

Чтобы исправить мою небольшую проблему, я переместил методы для вставки данных в базу данных из фрагментов в Activity. Я создал переменные в активности для ссылки на объекты в фрагментах.

0

, если они оба находятся в одной и той же деятельности, и в том же фрагменте в точке вы получаете данные, например, если мы предположим, что мы имеем пункт меню с ID: хром, имя String = «джон "и TextView mName было бы как:

 switch (item.getItemId()) { 
     // case R.id.chrome: 
     mName.setText(name); 

    } 

но одна вещь, которую вы должны знать, что фрагмент не имеет контекст, и нет ничего особенного фрагмента, просто убедитесь, что при получении данных вы в том же фрагменте вы должны получить данные.

+0

Все четыре фрагмента находятся в одной и той же деятельности. Но пункт меню пытается получить информацию из 3 фрагментов. В 4-м фрагменте будет отображаться сводка информации после ее сохранения в базе данных. –

+1

, когда вы хотите получить информацию из фрагмента, убедитесь, что его фрагмент отображается на экране в тот конкретный момент времени, затем сохраняйте данные в своей деятельности, создавайте «временные» объекты, которые будут хранить данные, пока вы не будете готовы использовать их, перестать просматривать его с комплексного угла, просто получить данные, как вы, когда у вас есть один фрагмент –

+0

. Могу ли я получить пример кода о том, как получить данные из фрагмента в активность? Созданы временные объекты. Я решил, чтобы объекты сохраняли значения при прокрутке фрагментов –