2016-07-15 21 views
1

私はワークアウトログ(myfitnesspalのものに似ています)の日カレンダーを作成しようとしていますが、ログを追跡するためにスワイプの日カレンダーを作成するのが難しいです。私はFragmentStatePagerAdaptersとViewPagersを使用することに決めました。ViewPagesを正しく読み込むことができません。Android ViewPagerが読み込まれない

package me.thomasdkim.fitit.workout; 

import android.support.v4.app.FragmentManager;  
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.List; 

import me.thomasdkim.fitit.R; 

public class Workout extends AppCompatActivity { 

    ViewPager myView; 
    DateFragmentAdapter mDateFragmentAdapter; 
    DateFragment[] dateFragmentArray; 


    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     System.out.println("The app is being created."); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_workout); 

     /* Declare variablees */ 
     Calendar yesterday, today, tomorrow; 
     yesterday = Calendar.getInstance(); 
     today = Calendar.getInstance(); 
     tomorrow = Calendar.getInstance(); 
     dateFragmentArray = new DateFragment[3]; 

     yesterday.add(Calendar.DAY_OF_MONTH, -1); //Set the date of    yesterday to the day before 
     tomorrow.add(Calendar.DAY_OF_MONTH, 1); //Set the date of tomorrow to the day after 


     dateFragmentArray[0] = DateFragment.newInstance(yesterday); 
     dateFragmentArray[1] = DateFragment.newInstance(today); 
     dateFragmentArray[2] = DateFragment.newInstance(tomorrow); 




     myView = (ViewPager) findViewById(R.id.pager); 
     mDateFragmentAdapter = new  DateFragmentAdapter(getSupportFragmentManager(), dateFragmentArray); 
     myView.setAdapter(mDateFragmentAdapter); 
     myView.setCurrentItem(1); 



    } 

    @Override 
    public void onBackPressed() { 
     if (myView.getCurrentItem() == 0) { 
      // If the user is currently looking at the first step, allow the system to handle the 
      // Back button. This calls finish() on this activity and pops the back stack. 
      super.onBackPressed(); 
     } else { 
      // Otherwise, select the previous step. 
      myView.setCurrentItem(myView.getCurrentItem() - 1); 
     } 
    } 

    public static class DateFragment extends Fragment { 

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

      System.out.println("OnCreateView is created."); 

      View rootView = inflater.inflate(R.layout.slide_date_fragment,container, false); 
      View newText = (TextView) rootView.findViewById(R.id.datefrag); 

      if(getArguments().getString("date") != null) { 
       System.out.println("THE ARGUMENT HAS A DATE"); 
       ((TextView)newText).setText(getArguments().getString("date")); 
       System.out.println("DATE IS " +  getArguments().getString("date")); 
      } 

      return rootView; 
     } 

     public static DateFragment newInstance(Calendar cal) { 

      System.out.println("newInstance activated"); 

      //Create new date fragment object 
      DateFragment newFrag = new DateFragment(); 

      //Create new Bundle to store aarguments 
      Bundle args = new Bundle(); 

      //Set a "date" paramater the the object 
      args.putString("date", dateToString(cal)); 
      newFrag.setArguments(args); //Set the argument to the newly created date fragment 
      return newFrag; 
     } 


} 

    public static class DateFragmentAdapter extends FragmentStatePagerAdapter{ 

     DateFragment[] fragList; 
     int fragNum; 

     public DateFragmentAdapter(FragmentManager fm, DateFragment[] fragList) { 
      super(fm); 
      this.fragNum = 3; 
      this.fragList = fragList; 
     } 

     @Override 
     public DateFragment getItem(int position) { 

      return this.fragList[position]; 
     } 

     @Override 
     public int getCount() { 

      return this.fragNum; 
     } 
    } 


    public static String dateToString(Calendar cal){ 
     String dateString; 
     dateString = cal.get(Calendar.MONTH) + "/" +  cal.get(Calendar.DAY_OF_MONTH) + "/" + 
     + cal.get(Calendar.YEAR); 

     return dateString; 
    } 
} 

activity_workout.xml:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="This is the activity_workout screeen." 
    /> 
<android.support.v4.view.ViewPager 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/pager"> 

</android.support.v4.view.ViewPager> 

slide_date_fragment.xml:

<!-- fragment_screen_slide_page.xml --> 

<TextView style="?android:textAppearanceMedium" 
    android:padding="16dp" 
    android:lineSpacingMultiplier="1.2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 
    android:id="@+id/datefrag" 
    android:text="slide date fragment." 
    /> 

非常に詳細な説明とヘルプは非常に高く評価されるだろう!私は自分自身にアプリケーション開発を教えようとしているので、これはすべて私にとって非常に新しいものです。

+0

activity_workout.xmlのTextViewのandroid:layout_height = "match_parent"をandroid:layout_height = "wrap_content"に置き換えてください。これが役立ちます。 –

+0

すみません、「正しくロードされた」という意味はどうですか?それは半分ロードすることを意味しますか?エラーメッセージ(logcatを確認)がありますか?いくつかの異常な行動ですか? – statosdotcom

+0

@statosdotcom申し訳ありませんが、私はより明確になっている必要があります。基本的にactivity_workout.xmlが表示されますが、日付の一部がロードされていないようです。 –

答えて

1

希望すると、これが役立ちます。

お試しくださいgetItemPosition(Object item)、あなたが変更したときにViewPagerが読み込まれます。あなたがFragmentStatePagerAdapternotifyDataSetChange()メソッドを呼び出すと

public class DrawerPager extends FragmentStatePagerAdapter { 
     List<Drawer> drawers; 
     Drawer appDraw; 

     public DrawerPager(FragmentManager fm, 
       List<Drawer> drawers) { 
      super(fm); 
      this.drawers= drawers; 
     } 

     @Override 
     public Fragment getItem(int arg0) { 
      // TODO Auto-generated method stub 
      return drawers.get(arg0); 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return drawers.size(); 
     } 
     @Override 
     public int getItemPosition(Object item) { 
      appDraw = (AppDrawer) item; 
      if (pg >= 0) { 
       return POSITION_NONE; 
      } else { 
       return pg; 
      } 

     } 

    } 

これはgetItemPosition(Object item)ViewPagerそのデータをリロードします呼び出します。

関連する問題