2016-05-17 86 views
0

我一直试图用列表视图中的项目被按下时用另一个替换当前片段。但是,当按钮被按下时,onClick方法被触发,但它不会替换片段。无法在viewpager中替换片段

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

    } 
} 

编辑:

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

试图哈伦的一个d Vivek_Neel的方法,他们都工作,但与格式

Messed Up Formatting

把安卓导致此问题:layout_below = “@ + ID/viewPager” 中的LinearLayout会导致片段不再显示

EDIT 3

与此https://stackoverflow.com/a/34573034/5509513

+1

是您的if条件执行? –

+0

此ID是exidts R.id.jv吗? – Haroon

+0

@PradeepGupta if条件被执行,但片段事务不起作用 – Isaac

回答

2

activity_graph.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> 

<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

尝试wrap_contentView Pager的高度,并与@+id/jd添加Relative Layout,并给它layout below view pager

请参阅此。

<?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> 

编辑1

其次办法做到这一点创建新的布局只Frame Layout。并在更换Fragment时使用它的占位符。

<?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