私はワークアウトログ(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."
/>
非常に詳細な説明とヘルプは非常に高く評価されるだろう!私は自分自身にアプリケーション開発を教えようとしているので、これはすべて私にとって非常に新しいものです。
activity_workout.xmlのTextViewのandroid:layout_height = "match_parent"をandroid:layout_height = "wrap_content"に置き換えてください。これが役立ちます。 –
すみません、「正しくロードされた」という意味はどうですか?それは半分ロードすることを意味しますか?エラーメッセージ(logcatを確認)がありますか?いくつかの異常な行動ですか? – statosdotcom
@statosdotcom申し訳ありませんが、私はより明確になっている必要があります。基本的にactivity_workout.xmlが表示されますが、日付の一部がロードされていないようです。 –