Android ViewPager无法加载 [英] Android ViewPager not loading
问题描述
我正在尝试为锻炼日志创建日日历(类似于myfitnesspal的日历),并且在创建滑动日日历以跟踪我的日志时遇到了一些困难.我决定使用FragmentStatePagerAdapters和ViewPagers,但似乎无法正确加载ViewPagers.
I'm trying to create a day calendar for a workout log (similar to that of myfitnesspal) and I'm having some difficulty creating a swiping day calendar to track my logs. I decided to use FragmentStatePagerAdapters and ViewPagers and I can't seem to get the ViewPagers to load properly.
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:
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:
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."
/>
非常详细的解释和帮助将不胜感激!我正在尝试自学应用开发,因此这对我来说是全新的.
Very detailed explanation and help would be very much appreciated! I'm trying to teach myself app development so this is all very new to me.
推荐答案
希望这对您有所帮助.
尝试此getItemPosition(Object item)
,进行任何更改时,它将加载ViewPager.
Try this getItemPosition(Object item)
, It will load your ViewPager when you make any change.
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;
}
}
}
当您调用FragmentStatePagerAdapter
的notifyDataSetChange()
方法时,它将调用此getItemPosition(Object item)
,而ViewPager
将重新加载其数据.
When you call notifyDataSetChange()
method of FragmentStatePagerAdapter
it will call this getItemPosition(Object item)
and ViewPager
will reload its data.
这篇关于Android ViewPager无法加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!