2017-12-13 6 views
0

基本的には、どのフラグメントが表示されているかに基づいて、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(); 


} 
+0

あなたのケースで意味があるかどうかわかりません。しかし、両方のフラグメントをホストし、このフラグにクエリdbを使用するあなたのアクティビティにフラグを保存できますか? –

+0

また、フラグメント内にdbデータを表示している場合は、それに応じてdbをクエリできます。 'HumansFrag'と' AnimalFrag'という2つのフラグメントがある場合のように。 'HumansFrag'と' AnimalTable'の内部で 'HumansTable'を' AnimalFrag'の中でクエリします。 –

+0

はい、私はリスト内のデータをフラグメント内に表示します....しかし2つの異なるフラグメントと2つの異なるlistViewがあります。 DBからロードするデータを選択する...私の解決策は上記です。 Arnetatively私はそれが可能なのは、1つのフラグメントと1つだけのListViewをロードし、その中に私が知っている(おそらくボタンをクリックして)正しいデータをロードすることができると思います。 – Magobin

答えて

0

何を:私はそれが動作する場合にのみ、テストの下DBAdapterクラスで私はコードで....私はListViewコントロールを移入したいフラグメントは....例えば定数変数を変更するというように取得することができますフラグメントを置換する際にフラグを渡すことができます。このフラグは、後でロードするデータを識別するために使用できます。 fragment2

Fragment2 frag = new Fragment2(); 
Bundle bundle = new Bundle(); 
bundle.put("MY_FLAG", 2); 
frag.setArgument(bundle); 

についてはfragment1

Fragment1 frag = new Fragment1(); 
Bundle bundle = new Bundle(); 
bundle.put("MY_FLAG", 1); 
frag.setArgument(bundle); 

については

次に、あなたがロードするデータの種類を識別するためのフラグでデータを使用することができます。

関連する問題