插入数据后如何刷新当前片段?

时间:2019-10-12 07:06:43

标签: java android fragment

我来自印度尼西亚,我想在向其中插入数据后刷新一个片段。.我已经尝试了很多次来刷新一个片段。但它行不通。 请帮助我。

这是我的代码。

MainActivity类

public class MainActivity extends FragmentActivity {

    public MainActivity() {

    }

    DatabaseReference dataBaseref;
    StorageReference strRef;
    TextView logout;
    TabLayout tabLayout;
    ViewPager viewPager;
    ViewPagerAdapter viewAdapter = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dataBaseref = FirebaseDatabase.getInstance().getReference();
        strRef = FirebaseStorage.getInstance().getReference();

        tabLayout = findViewById(R.id.tab_layout_isi_menu);
        viewPager = findViewById(R.id.view_pager_isi_menu);
        logout = findViewById(R.id.text_logout);

        viewAdapter = new ViewPagerAdapter(getSupportFragmentManager(), MainActivity.this);

        viewAdapter.addFragment(new isi_list_beli(), "Beli");
        viewAdapter.addFragment(new isi_list_cek(), "Cek Data");

        viewPager.setAdapter(viewAdapter);
        tabLayout.setupWithViewPager(viewPager);


        logout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                logOut();
            }
        });


    }

    private void logOut() {
        AuthUI.getInstance()
                .signOut(MainActivity.this)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        startActivity(new Intent(MainActivity.this, LoginActivity.class));
                        finish();
                    }
                }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(MainActivity.this, "" + e.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    public void onBackPressed() {
        super.finish();
    }

}

isi_list_cek类

public class isi_list_cek extends Fragment {

    private ListView listView;
    public AdapterListCek adapterListCek = null;
    private ArrayList<Cek> cekArrayList;
    Cursor cursor;
    View view;
    FloatingActionButton fab;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        adapterListCek = new AdapterListCek(getContext(), R.layout.item_in_list_barang, cekArrayList);
        adapterListCek.notifyDataSetChanged();
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @NonNull Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.list_barang, container, false);

        listView = view.findViewById(R.id.list_item_barang);
        fab = view.findViewById(R.id.tambah_barang);

        cekArrayList = new ArrayList<>();
        adapterListCek = new AdapterListCek(getContext(), R.layout.item_in_list_barang, cekArrayList);
        listView.setAdapter(adapterListCek);

        cursor = fragment_input_data.sqlHelper.getData("SELECT * FROM CEK");

        if(cursor.moveToFirst()){
            cekArrayList.clear();
            do{
                int id = cursor.getInt(0);
                String kode = cursor.getString(1);
                String nama = cursor.getString(2);
                String jumlah = cursor.getString(3);
                String harga = cursor.getString(4);
                byte[] gambar = cursor.getBlob(5);

                cekArrayList.add(new Cek(id, kode, nama, harga, jumlah, gambar));
            }while (cursor.moveToNext());
            fragment_input_data.sqlHelper.close();
        }

        adapterListCek.notifyDataSetChanged();


        listView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                return false;
            }
        });

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(getContext(), fragment_input_data.class));
            }
        });


        return view;
    }

    @Override
    public void onResume() {
        super.onResume();
    }
}

ViewPagerAdapter类

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

    private Map<Integer, String> mFragmentTags;
    private FragmentManager mFragmentManager;
    private Context mContext;
    private final List<Fragment> fragmentList = new ArrayList<>();
    private final List<String> fragmentListTitle = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager fm, Context mContext) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);

    }
    @Override
    public int getCount() {
        return fragmentListTitle.size();
        //return 2;


    }
    @NonNull
    @Override
    public CharSequence getPageTitle(int position) {
        return fragmentListTitle.get(position);
    }
    public void addFragment (Fragment fragment, String string){
        fragmentList.add(fragment);
        fragmentListTitle.add(string);
    }
}

我希望当我插入一些数据时,片段会自动更新其视图。

1 个答案:

答案 0 :(得分:0)

调用函数为:只需发送要重新创建的当前片段的新实例

replaceFragment(new YourPresentFragment());

功能如下:

private void replaceFragment(Fragment fragment) {

      String fragmentTag = fragment.getClass().getName();

      FragmentManager manager = getFragmentManager();
      FragmentTransaction ft = manager.beginTransaction();
      ft.replace(R.id.fragments, fragment, fragmentTag);
      ft.addToBackStack("fragments");
      ft.commit();

 }

这应该可以完成工作