基本的には、どのフラグメントが表示されているかに基づいて、2つの異なるテーブル(またはカラム)からSqliteからデータを取得します。私はすでに解決策(トリッキーな解決策)を見つけており、同じ結果に達する他の最善の方法があるかどうかを知りたいと思っています。私は単一の断片だけで多くのチュートリアルを作成しました。私がやったの下:すべての2つの異なるフラグメント内の2つのリストビューにSqliteデータを入れてください
まず、私のMainActivityに私が持っている:
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
toolbar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(),"Hai cliccato la barra",Toast.LENGTH_SHORT).show();
fragment = new HomeFragment();
if (fragment!=null) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.screen_area,fragment);
ft.commit();
}
}
});
とnavigationViewから私が見たいと思っているの断片を選択することができます。
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
}
if (fragment!=null) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.screen_area,fragment);
ft.commit();
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id= item.getItemId();
switch(id){
case R.id.carburante:
fragment = new CarburanteFragment();
break;
case R.id.giorni:
fragment = new GiorniFragment();
break;
..それ以降、私のCarburanteFragmentでフラグメントをDbAdapterに渡します。たとえば、「保存」の場合:
private void save(String name)
{
DBAdapter db=new DBAdapter(getActivity(),((MainActivity) getActivity()).fragment= this);
db.openDB();
boolean saved=db.add(name);
if(saved)
{
nameEditText.setText("");
this.getSpacecrafts();
}else {
Toast.makeText(getContext(),"Unable To Save",Toast.LENGTH_SHORT).show();
}
}
... finally
public DBAdapter(Context c,Fragment fr) {
this.c = c;
helper = new DBHelper(c);
Fragment currentFragment =fr;
if(currentFragment.getTag()=="carburante")
Toast.makeText(c, currentFragment.toString(), Toast.LENGTH_LONG).show();
}
あなたのケースで意味があるかどうかわかりません。しかし、両方のフラグメントをホストし、このフラグにクエリdbを使用するあなたのアクティビティにフラグを保存できますか? –
また、フラグメント内にdbデータを表示している場合は、それに応じてdbをクエリできます。 'HumansFrag'と' AnimalFrag'という2つのフラグメントがある場合のように。 'HumansFrag'と' AnimalTable'の内部で 'HumansTable'を' AnimalFrag'の中でクエリします。 –
はい、私はリスト内のデータをフラグメント内に表示します....しかし2つの異なるフラグメントと2つの異なるlistViewがあります。 DBからロードするデータを選択する...私の解決策は上記です。 Arnetatively私はそれが可能なのは、1つのフラグメントと1つだけのListViewをロードし、その中に私が知っている(おそらくボタンをクリックして)正しいデータをロードすることができると思います。 – Magobin