Je suis confronté à une question qui est lorsque j'insère des données dans la base de données sqlite à partir du premier fragment d'onglet, lorsque je sélectionne à partir du second fragment d'onglet, il ne peut pas afficher immédiatement, redémarrez uniquement les applications, les données peuvent être affichées.

Activité principale

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);
    }

}

}

Premier 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;
}

Deuxième 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;
}
1
Tang Weiming 17 janv. 2017 à 10:25

2 réponses

Meilleure réponse

Juste detach() et attach() le fragment, il le redessine, donc si vous obtenez les données dans le onCreateView(), il affichera les données mises à jour.

0
Luca Nicoletti 17 janv. 2017 à 08:44

Vous avez peu de choix pour gérer cela.

La première consiste à utiliser CursorLoader. Il existe une documentation sur l'utilisation des chargeurs.

La deuxième consiste à implémenter le rappel entre deux fragments. Il existe également une documentation sur la communiquer entre les fragments.

Dans votre cas, implémentez simplement le rappel dans le second Fragment onDataSaved et appelez cette méthode dans le premier Fragment lorsque vous enregistrez les données dans la base de données.

public interface DataSavedListener {
    void onDataSaved();
} 

Deuxième 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()
}
}

Premier 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;
}
0
Volodymyr 17 janv. 2017 à 09:03