我正在构建一个具有 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;
}