如何将Object传递给FragmentActivity

时间:2015-02-03 11:58:44

标签: java android android-fragments

我有一个与FragmentTabHost有活动的Android应用程序。

所以这是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检查托运人时,我从数据库中获得了一个Object。我想在Fragment中插入此对象的信息。 现在在onCreate方法中我插入了所有选项卡,同一个类,但我将为这三个选项卡创建三个不同的类。

2 个答案:

答案 0 :(得分:0)

似乎你可以通过你现在设置为null的Bundle paramaneter为标签添加参数。

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

因此,不要将Bundle设置为null,而是可以执行以下操作:

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

点击此链接了解更多信息: Android : passing parameters to a tab

答案 1 :(得分:0)

您可以创建Bundle并使用putExtra()方法来放置Object。然后,您必须在Fragment onCreate()中检索它。

如果您可以t put对象`,请尝试使用GSON库。