2015-10-14 39 views
2

我有幾天有一個問題,並決定直接問,期待一些幫助。對不起,如果我的英語不好。Android TabLayout與片段,使用newInstance發送參數

我有什麼: 使用ViewPager(FragmentStatePagerAdapter)具有3個片段,並使用在每個片段中所定義的newInstance方法的活動發生參數(束)。

我想什麼: 在片段A由一個按鈕來發送一些數據進行分段B.片段B立即切換到使用: ACTIVITY.setCurrentItem(項目); ----->在這種情況下檔案=片段數1 並採取從片段A.

的問題發送的數據的控制: 我同時使用的newInstance也發送數據: 1。活動 - >片段(A,B,C) 2.片段A→片段B 但是從片段A發送到片段B的數據爲空。我只能通過活動發送。

使用Tabs在片段之間移動。

某些代碼:

ViewPager

public class PagerAdapterMainCliente extends FragmentStatePagerAdapter { 
int gNumsTabsCliente; 
Bundle arguments; 
TabFragmentCotizacion tfCotizacionCliente; 

public PagerAdapterMainCliente(FragmentManager fragmentManager, int numTabsCliente, Bundle arguments) 
{ 
    super(fragmentManager); 
    this.gNumsTabsCliente = numTabsCliente; 
    this.arguments = arguments; 
} 

@Override 
public Fragment getItem(int position) 
{ 
    switch (position) 
    { 
     case 0: 
      TabFragmentProducto tfProductoCliente = TabFragmentProducto.newInstance(arguments); 
      return tfProductoCliente; 
     case 1: 
      tfCotizacionCliente = TabFragmentCotizacion.newInstance(arguments); 
      return tfCotizacionCliente; 
     case 2: 
      TabFragmentPedido tfPedidoCliente = new TabFragmentPedido(); 
      return tfPedidoCliente; 
     default: 
      return null; 
    } 
} 

@Override 
public int getCount() { return gNumsTabsCliente; } 

}

活動

public class MainCliente extends AppCompatActivity { 

private Activity thisActivity; 

ViewPager vpagerMainClienteA; 
PagerAdapterMainCliente pAdapterMainCliente; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_cliente); 
    this.thisActivity = this; 

    Bundle bundleCliente = new Bundle(); 
    bundleCliente.putString("CODIGO_CLIENTE", getIntent().getStringExtra("CODIGO_CLIENTE")); 

    TabLayout tlayoutMainClienteA = (TabLayout) findViewById(R.id.tlayoutMainCliente); 


    tlayoutMainClienteA.addTab(tlayoutMainClienteA.newTab().setText("Productos")); 
    tlayoutMainClienteA.addTab(tlayoutMainClienteA.newTab().setText("Cotización")); 
    tlayoutMainClienteA.addTab(tlayoutMainClienteA.newTab().setText("Pedidos")); 
    tlayoutMainClienteA.setTabGravity(TabLayout.OVER_SCROLL_ALWAYS); 

    vpagerMainClienteA = (ViewPager) findViewById(R.id.vpagerMainCliente); 
    pAdapterMainCliente = new PagerAdapterMainCliente(getSupportFragmentManager(), tlayoutMainClienteA.getTabCount(), bundleCliente); 

    vpagerMainClienteA.setAdapter(pAdapterMainCliente); 
    vpagerMainClienteA.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tlayoutMainClienteA)); 
    vpagerMainClienteA.setOffscreenPageLimit(1); 

    tlayoutMainClienteA.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      vpagerMainClienteA.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) {} 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) {} 
    }); 
} 

public void setCurrenttPagerItem(int item) { 
    vpagerMainClienteA.setCurrentItem(item); 
} 

片段A

public class TabFragmentProducto extends Fragment { 
ProgressDialog pdialog;boolean resp; 

private EditText etBuscarProductoA; 
private ListView lvListaProductoA; 
private Button bSeleccionarProductoA; 

ArrayList<ArrayDatosProducto> arrayDatosProducto = new ArrayList<>(); 
ArrayDatosProducto arrayDatosP; 

public TabFragmentProducto() {} 

public static TabFragmentProducto newInstance(Bundle arguments) { 
    TabFragmentProducto tabFragmentProducto = new TabFragmentProducto(); 
    if (arguments != null) { 
     tabFragmentProducto.setArguments(arguments); 
    } 
    return tabFragmentProducto; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    final View rootView = inflater.inflate(R.layout.tab_fragment_producto, container, false); 

    etBuscarProductoA = (EditText) rootView.findViewById(R.id.etBuscarProducto); 
    lvListaProductoA = (ListView) rootView.findViewById(R.id.lvListaProducto); 
    bSeleccionarProductoA = (Button) rootView.findViewById(R.id.bSeleccionarProducto); 




    bSeleccionarProductoA.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

       //Send data to Fragment B 
        Bundle bundleCotizacion = new Bundle(); 

      bundleCotizacion.putString("hola", "hola"); 
      TabFragmentCotizacion tabFragmentCotizacion = TabFragmentCotizacion.newInstance("hola"); 
      ((MainCliente) getActivity()).setCurrenttPagerItem(1); 

      } 
    }); 

片段B

public class TabFragmentCotizacion extends Fragment { 

private JSONObject jsonobject; 
private ArrayDatosCotizacion arrayDatosCotizacionBD; 
private ArrayList<ArrayDatosCotizacion> arrayDatosCotizacions = new ArrayList<>(); 


public TabFragmentCotizacion() {} 

public static TabFragmentCotizacion newInstance(Bundle arguments) { 
    TabFragmentCotizacion tabFragmentCotizacion = new TabFragmentCotizacion(); 
    if (arguments != null) { 
     tabFragmentCotizacion.setArguments(arguments); 
    } 
    return tabFragmentCotizacion; 
} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) { 
    final View rootView = inflater.inflate(R.layout.tab_fragment_cotizacion,  container, false); 

return rootView; 
} 

} 

回答

0

而不是

TabFragmentCotizacion tabFragmentCotizacion = TabFragmentCotizacion.newInstance("hola"); 

使用

TabFragmentCotizacion tabFragmentCotizacion = TabFragmentCotizacion.newInstance(bundleCotizacion); 
1

你已經putString( 「HOLA」,「豪LA「); 但不是那樣,你繼續使用單個字符串「hola」

TabFragmentCotizacion tabFragmentCotizacion = TabFragmentCotizacion.newInstance(bundleCotizaction);