1

i face a question which is when i insert data into sqlite database from first tab fragment, when i select from second tab fragment it cannot show immediately only restart the apps the data can be show.

Main Activity

public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener{

//This is our tablayout
private TabLayout tabLayout;
//This is our viewPager
private ViewPager viewPager;
int ans =3;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Adding toolbar to the activity
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    //Initializing the tablayout
    tabLayout = (TabLayout) findViewById(R.id.tabLayout);

    BasePagerAdapter adapter = new BasePagerAdapter(getSupportFragmentManager());
    Tab1 tab1 = new Tab1();
    Tab2 tab2 = new Tab2();
    Tab3 tab3 = new Tab3();

    adapter.addFragment(tab1, "1");
    adapter.addFragment(tab2, "2");
    adapter.addFragment(tab3, "3");
    //Initializing viewPager
    viewPager = (ViewPager) findViewById(R.id.pager);

    //Adding adapter to pager
    viewPager.setAdapter(adapter);

    //Adding onTabSelectedListener to swipe views
    tabLayout.setOnTabSelectedListener(this);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    tabLayout.setupWithViewPager(viewPager);

}

@Override
public void onTabSelected(TabLayout.Tab tab) {
    viewPager.setCurrentItem(tab.getPosition());
}

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

}

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

}
public class BasePagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    public BasePagerAdapter(FragmentManager manager) {
        super(manager);
    }

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

    @Override
    public int getCount() {
        return mFragmentList.size();
    }


    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }


    public void removeFragment(int position) {
        mFragmentTitleList.remove(position);
        mFragmentList.remove(position);
        notifyDataSetChanged();

    }
    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

}

}

first fragment

public class Tab1 extends Fragment {



EditText editext,editext2,editext3;
Button test;
DBController db;

//Overriden method onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View h = inflater.inflate(R.layout.tab1, container, false);
    //Returning the layout file after inflating
    //Change R.layout.tab1 in you classest
    editext =(EditText)h.findViewById(R.id.editText);
    editext2 =(EditText)h.findViewById(R.id.editText2);
    editext3 =(EditText)h.findViewById(R.id.editText3);
    test = (Button)h.findViewById(R.id.button);

    test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           String name = editext.getText().toString();
           String hh = editext2.getText().toString();
           String image = editext3.getText().toString();

            SQLiteOpenHelper db = new DBController(getActivity());
            SQLiteDatabase db1 = db.getWritableDatabase();
            ContentValues cv = new ContentValues();
            cv.put("CategoryName", name);
            cv.put("CategoryH", hh);
            cv.put("CategoryImage", image);

            db1.insert("Category", null, cv);
            db1.close();
        }
    });



    return  h;
}

Second Fragment

public class Tab2 extends Fragment {
List<Category> category;
DBController db;
ListView testlist;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View h = inflater.inflate(R.layout.tab2, container, false);
    testlist = (ListView)h.findViewById(R.id.listview);
    category = getProList();
    testlist.setAdapter(new ViewAdapter());


        return h;

}
public class ViewAdapter extends BaseAdapter {

    LayoutInflater mInflater;

    public ViewAdapter() {
        mInflater = LayoutInflater.from(getActivity());
    }

    @Override
    public int getCount() {
        return category.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.testlist_view, null);
        }

        final TextView Pname = (TextView) convertView.findViewById(R.id.TPname);
        Pname.setText("" + category.get(position).getCategoryName());

        final TextView PX = (TextView) convertView.findViewById(R.id.TPX);
        PX.setText("" + category.get(position).getCategoryH());

        final TextView PY = (TextView) convertView.findViewById(R.id.TPY);
        PY.setText("" + category.get(position).getCategoryImage());


        notifyDataSetChanged();

        return convertView;
    }
}

public List<Category> getProList() {

    String selectQuery = "SELECT  * FROM Category ";
    db = new DBController(getActivity());
    SQLiteDatabase db1 = db.getReadableDatabase();
    Cursor cursor = db1.rawQuery(selectQuery, null);
    List<Category> Prolist = new ArrayList<Category>();
    if (cursor.moveToFirst()) {
        do {
            Category list = new Category();
            list.setCategoryName(cursor.getString(cursor.getColumnIndex("CategoryName")));
            list.setCategoryW(cursor.getString(cursor.getColumnIndex("CategoryH")));
            list.setCategoryImage(cursor.getString(cursor.getColumnIndex("CategoryImage")));

            Prolist.add(list);
        } while (cursor.moveToNext());
    }

    return Prolist;
}
Tang Weiming
  • 47
  • 2
  • 9

2 Answers2

0

Just detach() and attach() the fragment, it will redraw it, so if you're getting the data in the onCreateView() it will display updated data.

Luca Nicoletti
  • 2,265
  • 2
  • 18
  • 32
0

You have few choices how to handle this.

First is to use CursorLoader. There is a documentation how to use loaders.

Second is to implement callback between two fragments. There is also documentation how to communicate between fragments.

In your case just implement callback in the second Fragment onDataSaved and call this method in the first Fragment when you save data to the database.

public interface DataSavedListener {
    void onDataSaved();
} 

Second Fragment

public class Tab2 extends Fragment implements DataSavedListener {
List<Category> category;
DBController db;
ListView testlist;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View h = inflater.inflate(R.layout.tab2, container, false);
    testlist = (ListView) h.findViewById(R.id.listview);
    category = getProList();
    testlist.setAdapter(new ViewAdapter());


    return h;

}

@Override
public void onDataSaved() {
    getProList()
}
}

First Fragment

public class Tab1 extends Fragment {
 DataSavedListener dataSavedListener;
 //Overriden method onCreateView
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//you code here

 test.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       //you code here

       dataSavedListener.onDataSaved();
    }
});

return  h;
}
Volodymyr
  • 6,393
  • 4
  • 53
  • 84