2016-05-17 12 views
0

リストビューのアイテムが押されたときに、現在のフラグメントを別のものに置き換えようとしています。しかし、ボタンを押すと、onClickメソッドは起動されますが、フラグメントは置き換えられません。ビューページ内のフラグメントを置き換えることができません

JournalFragment.java

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

     rootView = inflater.inflate(R.layout.fragment_journal_view, container, false); 
     context = getContext(); 
     ListView myView = (ListView) rootView.findViewById(R.id.listView); 

     TableControllerUser TCU = new TableControllerUser(context); 
     final TableControllerJournal TCJ = new TableControllerJournal(context); 


     int accID = TCU.getLoggedInId(); 
     Cursor cursor = TCJ.getAllJournals(accID); 
     Cursor allFood = TCJ.getAllFoodJournals(accID); 
     Cursor allActivity = TCJ.getAllActivityJournals(accID); 
     Cursor[] cursors = {cursor, allFood, allActivity}; 

     MergeCursor m = new MergeCursor(cursors); 

     final JournalAdapter adapter = new JournalAdapter(context, m, 0); 

     myView.setAdapter(adapter); 

     myView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Cursor c = (Cursor) adapter.getItem(position); 
       Toast.makeText(getActivity(), "onClick Pressed!", Toast.LENGTH_SHORT).show(); 

       String title = c.getString(c.getColumnIndexOrThrow("title")); 

       if (title.contains("Glucose")) { 
        String glucose = c.getString(c.getColumnIndexOrThrow("glucose")); 
        String dateTime = c.getString(c.getColumnIndexOrThrow("glucose_time")); 
        String journalId = c.getString(c.getColumnIndexOrThrow("_id")); 
        String split[] = dateTime.split(" "); 
        String date = split[0]; 
        String time = split[1]; 

        Fragment gluFrag = new GlucoseFragment(); 

        Bundle bundle = new Bundle(); 
        bundle.putString("time", time); 
        bundle.putString("date", date); 
        bundle.putString("glucose", glucose); 
        bundle.putString("journalId", journalId); 

        gluFrag.setArguments(bundle); 
        ((GraphActivity) getActivity()).replaceFragments(gluFrag, bundle); 
       } 
      } 
     }); 
     return rootView; 
     // Inflate the layout for this fragment 
    } 

} 

JournalFragment.XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="edu.tp.sghealthapp.JournalViewFragment" 
    android:id="@+id/jv"> 


     <ListView 
      android:id="@+id/listView" 
      android:layout_below="@+id/viewPager" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:divider="@color/iron" 
      android:dividerHeight="1dp" /> 

</LinearLayout> 

JournalListViewLayout.XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <TextView 
     android:id="@+id/txt_listTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@+id/arrowIcon" 
     android:layout_toStartOf="@+id/arrowIcon" 
     android:textColor="#000000" 
     android:focusable="false" 
     android:textSize="16sp" 
     android:typeface="sans" /> 

    <ImageView 
     android:id="@+id/arrowIcon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:focusable="false" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:src="@drawable/ic_arrow" /> 
</RelativeLayout> 

GraphActivity.java

public class GraphActivity extends AppCompatActivity { 

    Context context; 
    TabLayout mTabLayout; 
    ViewPager mViewPager; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     context = getApplicationContext(); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     setContentView(R.layout.activity_graph); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setElevation(0); 


     mTabLayout = (TabLayout) findViewById(R.id.tabLayout); 
     mViewPager = (ViewPager) findViewById(R.id.viewPager); 
     ViewPagerAdapter pgAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     pgAdapter.addFragments(new GraphFragment(), "Graph"); 
     pgAdapter.addFragments(new JournalViewFragment(), "Journal"); 
     mViewPager.setAdapter(pgAdapter); 
     mTabLayout.setupWithViewPager(mViewPager); 


    } 

    public void replaceFragments(Fragment newFragment, Bundle bundle) { 
     Fragment fragment = newFragment; 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     fragment.setArguments(bundle); 
     ft.replace(R.id.jv, fragment); 
     ft.commit(); 

    } 
} 

EDIT:

ActivityGraph.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    tools:context=".GraphActivity" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/graph"> 


    <android.support.design.widget.TabLayout 
     android:id="@+id/tabLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/primary" 
     app:tabGravity="fill" 
     app:tabMode="scrollable" 
     app:tabSelectedTextColor="@color/white" 
     app:tabTextColor="@color/black"> 
     <!--To be fixed in future to occupy whole bar when mode = fixed--> 


    </android.support.design.widget.TabLayout> 

    <edu.tp.sghealthapp.library.graphViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/tabLayout"></edu.tp.sghealthapp.library.graphViewPager> 





</RelativeLayout> 

EDIT 2

しようとしましたHarronのAN D Vivek_Neelの方法は、それらの両方が動作しますが、アンドロイド置くフォーマット

Messed Up Formatting

で、この問題を引き起こす:layout_belowを= "@ + ID/viewPager" のLinearLayoutでは表示されなくなり

にフラグメントが発生しますEDIT 3

このhttps://stackoverflow.com/a/34573034/5509513

+1

はあなたのif-conditionが実行されますか? –

+0

このIDはR.id.jvをexixtsしますか? – Haroon

+0

@PradeepGupta if条件が実行されたが、フラグメントトランザクションが機能しない – Isaac

答えて

2

activity_graph.xmlチェック:View Pagerの高さwrap_contentを試してみて、@+id/jdRelative Layoutを追加し、それにlayout below view pagerを与える

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    tools:context=".GraphActivity" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/graph"> 


    <android.support.design.widget.TabLayout 
     android:id="@+id/tabLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/primary" 
     app:tabGravity="fill" 
     app:tabMode="scrollable" 
     app:tabSelectedTextColor="@color/white" 
     app:tabTextColor="@color/black"> 
     <!--To be fixed in future to occupy whole bar when mode = fixed--> 


    </android.support.design.widget.TabLayout> 

    <edu.tp.sghealthapp.library.graphViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/tabLayout"></edu.tp.sghealthapp.library.graphViewPager> 

<LinearLayout 
    android:id="@+id/jv" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 



</RelativeLayout> 
+0

フラグメントを置き換えることができますが、今ではフォーマットに問題があります: [リンク](http://i.imgur.com/iEn2LvZ.png) – Isaac

+0

@Isaacここでブロックされているため、リンクを確認できません私の会社で申し訳ありません:) –

+0

編集を確認、私はスクリーンショットを埋め込んで – Isaac

2
<FrameLayout 
    android:id="@+id/jv" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
付き書式設定の問題を修正しました

は、このコードスニップを入れて、活動にと

+0

あなたのメソッドとVivek_Neelの両方で目的の効果が得られますが、フォーマットに問題がありますので参考にしてください編集。ありがとう! – Isaac

2

を。

これを参照してください。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/graph" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 


    <android.support.design.widget.TabLayout 
     android:id="@+id/tabLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/ColorPrimary" 
     app:tabGravity="fill" 
     app:tabMode="scrollable" 
     app:tabSelectedTextColor="#FFF" 
     app:tabTextColor="#000"> 
     <!--To be fixed in future to occupy whole bar when mode = fixed--> 


    </android.support.design.widget.TabLayout> 

    <edu.tp.sghealthapp.library.graphViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/tabLayout" /> 

    <RelativeLayout 
     android:id="@+id/jv" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/viewPager" /> 


</RelativeLayout> 

EDIT 1

だけFrame Layoutで新しいレイアウトを作成し、それを行うための第二の方法。 Fragmentを交換している間はPlace Holderを使用してください。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:id="@+id/jd" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </FrameLayout> 

</LinearLayout> 
+0

これは動作しません。 onClickメソッドが起動されても、新しいフラグメントは表示されません。( – Isaac

+0

ビューのページャの下のフラグメントコンテンツを置き換えて表示します。コンテンツをラップしていない場合は、100dpのようなページャを表示するように高さを指定します。 –

+0

@jayDorider 私はすでにfragmentTransaction.replaceを使用しています – Isaac

関連する問題