2015-02-03 3 views
0

У меня есть приложение для Android, у которого есть активность с FragmentTabHost.Как передать объект в FragmentActivity

Так это файл XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#4d4d4d" 
    android:baselineAligned="false" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:baselineAligned="false" 
     android:gravity="center_horizontal" 
     android:orientation="horizontal" > 

     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:layout_weight="4" 
      android:orientation="vertical"> 

      <EditText 
       android:id="@+id/editDescrizione" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="15dp" 
       android:hint="@string/inserisciragioneSociale" 
       android:inputType="text" 
       android:singleLine="true" /> 
     </LinearLayout> 

     <ImageButton 
      android:id="@+id/ImageButton02" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:background="@null" 
      android:onClick="checkCliente" 
      android:src="@drawable/search_" /> 
    </LinearLayout> 

    <android.support.v4.app.FragmentTabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom"/> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" /> 
    </LinearLayout> 

</android.support.v4.app.FragmentTabHost> 


</LinearLayout> 

Это класс Java:

protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_clienti); 

     mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
     mTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent); 

     mTabHost.addTab(
       mTabHost.newTabSpec("tab1").setIndicator("Tab 1", null), 
       infoCliente.class, null); 
     mTabHost.addTab(
       mTabHost.newTabSpec("tab2").setIndicator("Tab 2", null), 
       infoCliente.class, null); 
     mTabHost.addTab(
       mTabHost.newTabSpec("tab3").setIndicator("Tab 3", null), 
       infoCliente.class, null); 

     apriConnessioneDB(); 
    } 

public void ricercaCliente(String ragioneSociale){ 
     List<Cliente> listaClienti = db.fetchClienti(ragioneSociale); 
     Cliente cliente = null; 
     if(listaClienti==null || listaClienti.size()==0){ 
      AlertDialog.Builder alert = new AlertDialog.Builder(this); 
      alert.setTitle(R.string.AlertErrore_Titolo); 
      // Setting Dialog Message 
      alert.setMessage(R.string.AlertErroreClienteInesistente_Descrizione); 
      alert.show(); 
     }else if(listaClienti.size()==1){ 
      //nel database � presente un solo articolo 
      //in base ai criteri di ricerca 
      cliente = listaClienti.get(0); 
      TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); 

//   creaAlertQuantita(articolo); 
     }else{ 

      //se ci sono pi� articoli in base al criterio di ricerca, 
      //devo mostrare l'alert con una lista 
      List<String> lista = new ArrayList<String>(); 
      for(Iterator<Cliente> it = listaClienti.iterator(); it.hasNext();){ 
       Cliente cliente2 = it.next(); 
       lista.add(cliente2.getDescrizione()); 
      } 
      final CharSequence[] items = lista.toArray(new String[lista.size()]); 

      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("Più clienti trovati"); 
      builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        String descrizione= (String) items[which]; 
        List<Articoli> listaArticoli = db.fetchArticoli("",descrizione); 
        if(listaArticoli!=null && listaArticoli.size()==1){ 
         Articoli articolo = listaArticoli.get(0); 
         //creaAlertQuantita(articolo); 
         //alertArticoli.dismiss(); 
        }else{ 

        } 
       } 
      }); 
      alertArticoli = builder.create(); 
      alertArticoli.show(); 
     } 
    } 

Теперь я хочу этого, когда пользователь проверяет грузоотправителя по EditTextView, у меня из базы данных Объект. Я хочу вставить информацию об этом объекте в Фрагмент. Теперь в методе onCreate у меня есть вкладка во всех вкладках, тот же класс, но я буду создавать три разных класса для трех вкладок.

ответ

0

Кажется, вы можете добавить аргументы на вкладку с помощью параманетера Bundle, который вы теперь установили null.

mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab 1", null), infoCliente.class, null); 

Таким образом, вместо установки Bundle пустое значение, вы можете сделать что-то вроде этого:

mTabHost.fragment = Fragment.instantiate(mContext, mTabHost.clss.getName(), mTabHost.args); 

Проверить эту ссылку для получения дополнительной информации: Android : passing parameters to a tab

+0

Я пытаюсь сделать этот код: Cliente cliente = listaClienti.get (0); \t \t \t \t \t \t mTabHost = (FragmentTabHost) findViewById (android.R.id.tabhost); С помощью этого кода я могу передать objcet фрагменту \t \t \t \t mTabHost.clearAllTabs(); \t \t \t \t //mTabHost.setup(ct, getSupportFragmentManager(), android.R.id.tabcontent); \t \t \t \t Bundle b = new Bundle(); \t \t \t \t b.putString ("RAGIONESOCIALE", cliente.getDescrizione()); \t \t \t \t mTabHost.addTab ( \t \t \t \t mTabHost.newTabSpec ("tab1") setIndicator ("Таблица 1", нулевой), \t \t \t \t infoCliente.class, б.); – bircastri

+0

И это работает? –

0

Вы можете создать Bundle и использовать putExtra() метод для размещения вашего Object. Затем вы должны получить его в своем Fragment в onCreate().

Если вы можете t put Объект`, попробуйте использовать GSON библиотеки.

+0

Спасибо за ответ, но в первый раз я должен создать черный FragmentActivity, после того, как пользователь выполнит поиск Клиента, все TAB должны быть заполнены параметром – bircastri

Смежные вопросы