0

我正在构建一个具有 3 个片段的应用程序条码/rfid 应用程序。我想从 FragmentA 重新加载 FragmentB。每当用户扫描条形码并将其添加到 FragmentA 中的 sqlite db 时,它应该刷新 FragmentB 中的列表。片段 B 使用 sqlite db 显示所有条形码。此时,Fragment B 只显示它在创建 Fragment 时最初从 sqlite 查询的列表。我想在单击片段时刷新片段,或者在单击片段 A 中的添加时重新加载片段 B。我对片段不太了解,希望能详细说明。我正在使用 viewpager2 和 FragmentStateAdapter(fragmentActivity)。我在网上搜索过,只找到与 FragmentStateAdapter(FragmentManager) 相关的答案,而与 FragmentStateAdapter(fragmentActivity) 无关。

ShippingViewPagerAdapter2

public class ShippingViewPagerAdapter2 extends FragmentStateAdapter {

public ShippingViewPagerAdapter2(@NonNull FragmentActivity fragmentActivity) {
    super(fragmentActivity);


}

@NonNull
@Override
public Fragment createFragment(int position) {

    switch (position){
        case 0:
           
            return new ShippingMainFragment();
        case 1:

            return new ShippingScannedFragment();
        case 2:
            
            return new ShippingUnscannedFragment();

    }
    return null;
}


@Override
public int getItemCount() {
    return 3;
}


}

运送菜单

public class ShippingMenu extends AppCompatActivity {




public int getItemPosition(Object object){
    return PagerAdapter.POSITION_NONE;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewpager2_item);

    TabLayout tabs = findViewById(R.id.tabs);
    ViewPager2 view_pager2 = findViewById(R.id.view_pager2);

    ShippingViewPagerAdapter2 adapter= new ShippingViewPagerAdapter2(this);
    view_pager2.setAdapter(adapter);
    
    new TabLayoutMediator(tabs, view_pager2, new TabLayoutMediator.TabConfigurationStrategy() {
        @Override
        public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
            tab.setText(getPageTitle(position));
        }
    }).attach();

}

public CharSequence getPageTitle(int position) {

    if (position == 0) {
        return "MAIN";
     
    }else if (position == 1) {

        return "SCANNED";
    } else{

        return "UNSCANNED";
    }
}
}

ShippingMainFragment(FragmentA)

 public class ShippingMainFragment extends Fragment implements View.OnClickListener, IBarcodeResult {


public ShippingMainFragment() {
    // Required empty public constructor
}

/**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 * @return A new instance of fragment ShippingMainFragment.
 */
// TODO: Rename and change types and number of parameters
public static ShippingMainFragment newInstance(String param1, String param2) {
    ShippingMainFragment fragment = new ShippingMainFragment();
     return fragment;
}



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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView= inflater.inflate(R.layout.fragment_shipping_main, container, false);
    
    shippingAdd = (Button) rootView.findViewById(R.id.shippingAdd);

    shippingAdd.setOnClickListener(this);

shippingAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         addTagToList();
        }
    });

    return rootView;
}

private void addTagToList() {

    

    DBHelperScannedStock dbScannedStock = new DBHelperScannedStock(getActivity());

    dbScannedStock.insertStock("", dbBarcode, dbTagID, dbProductCode, dbBlockNumber, dbSlabNumber, "", "",
            "", "", "", dbLocationCode, "", dbSalesOrderNumber, "",
            dbStatusID, dbStatusName, "", "", "");
  }

ShippingScannedFragment(FragmentB)

public class ShippingScannedFragment extends Fragment {

 public ShippingScannedFragment() {
    // Required empty public constructor
}

/**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 * @return A new instance of fragment ShippingUnscannedFragment.
 */
// TODO: Rename and change types and number of parameters
public static ShippingScannedFragment newInstance(String param1, String param2) {
    ShippingScannedFragment fragment = new ShippingScannedFragment();
    fragment.setArguments(args);
    return fragment;
}


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

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView =  inflater.inflate(R.layout.fragment_shipping_scanned, container, false);

dbScannedStock = new DBHelperScannedStock(getActivity());

Cursor cursor = dbScannedStock.viewData();


    if (cursor.getCount() == 0) {
        Toast.makeText(getActivity(), "SQLite No data to show", Toast.LENGTH_SHORT).show();
    } else {
        while (cursor.moveToNext()) {
            scannedIDs.add(cursor.getString(cursor.getColumnIndex("id")));
            Log.d("scannediddb", String.valueOf(scannedIDs));
            scannedbarcodes.add(cursor.getString(cursor.getColumnIndex("Barcode")));
            scannedproductCodes.add(cursor.getString(cursor.getColumnIndex("ProductCode")));
            scannedtagids.add(cursor.getString(cursor.getColumnIndex("TagID")));
            scannedlocations.add(cursor.getString(cursor.getColumnIndex("LocationCode")));
            scannedslabnumbers.add(cursor.getString(cursor.getColumnIndex("SlabNumber")));
            scannedblocknumbers.add(cursor.getString(cursor.getColumnIndex("BlockNumber")));
            scannedsalesordernumbers.add(cursor.getString(cursor.getColumnIndex("SalesOrderNumber")));
            scannedstatuses.add(cursor.getString(cursor.getColumnIndex("StatusName")));

        }
    }
      scannedproductListItems = new ArrayList<ProductListItems>();
 ProductListItems item = new ProductListItems(scannedIDs.get(i), scannedbarcodes.get(i), scannedproductCodes.get(i), scannedlocations.get(i), scannedblocknumbers.get(i), scannedslabnumbers.get(i), scannedtagids.get(i), scannedsalesordernumbers.get(i), ScannedStatusName);
        scannedproductListItems.add(item);

RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(getContext(), scannedproductListItems);

    // Log.d("adapter",adapter.toString());
    if (recyclerViewAdapter != null) {
        Log.d("adapter", "notnull");
        recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext(), LinearLayoutManager.VERTICAL, false));
        recyclerView.setAdapter(recyclerViewAdapter);
    
    } else {
        Log.d("adapter", "null");
    }
    recyclerViewAdapter.notifyDataSetChanged();

    });
    return rootView;
}
4

0 回答 0