gpt4 book ai didi

android - ViewPager 花时间加载包含 ListViews 的 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:55 24 4
gpt4 key购买 nike

范围:

我在 fragment (Schedule Fragment)中使用 ViewPager,它依次显示同一 fragment (ScheduleListSubFragment)的 5 个实例,其中包含各自 ListView 中的不同数据。我正在使用 FragmentPagerAdaper (ScheduleFragmentAdapter)。

代码:

代码如下:

计划 fragment :

    public class ScheduleFragment extends Fragment{
ScheduleFragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;
TitlePageIndicator indicator;

@Override
public void onResume() {
Log.d(" onResume()------------------ScheduleFrament","oijlkjlijijoij");
super.onResume();
}

public void setNstartAnimation(final View v, int id, int duration)
{
Animation anim = AnimationUtils.loadAnimation(getActivity(), id);
anim.setAnimationListener(new Animation.AnimationListener() {

@Override
public void onAnimationStart(Animation animation) {
v.setVisibility(View.VISIBLE);
}

@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}

@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub

}
});

anim.setDuration(duration);
v.startAnimation(anim);
}


@Override
public void onViewStateRestored(Bundle savedInstanceState) {
Log.d(" onViewState Restored()------------------ScheduleFrament","oijlkjlijijoij");

super.onViewStateRestored(savedInstanceState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Log.d(" onCreate()------------------ScheduleFrament","oijlkjlijijoij");

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.scheduled_list, null);

MainActivity.setTouchModewithCurrentPage();

Log.d(" onCreateView()------------------ScheduleFrament","oijlkjlijijoij");


mAdapter = new ScheduleFragmentAdapter(getChildFragmentManager());
prepareSlidingPager(v);

final TextView tv = (TextView) v.findViewById(R.id.category_header);
tv.setTypeface(Utils.getHeroFace(getActivity().getAssets()));
setNstartAnimation(tv, R.anim.slide_in_top, 1000);

return v;
}

private void prepareSlidingPager(View v)
{

mPager = (ViewPager)v.findViewById(R.id.pager);

mPager.setOffscreenPageLimit(4);

mPager.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();


mIndicator = (TitlePageIndicator)v.findViewById(R.id.indicator);
indicator = (TitlePageIndicator) mIndicator;
mIndicator.setViewPager(mPager);
mIndicator.setCurrentItem(getArguments().getInt("page"));

mIndicator.setOnPageChangeListener(new pageListener());


final float density = getResources().getDisplayMetrics().density;
indicator.setBackgroundColor(0x18AF0000);
indicator.setFooterColor(0xFFAA2222);

//indicator.setFooterColor(0xFFAA33);

indicator.setFooterLineHeight(2 * density); //1dp
indicator.setFooterIndicatorHeight(3 * density); //3dp
indicator.setFooterIndicatorStyle(IndicatorStyle.Underline);

indicator.setTextColor(0xAA000000);
indicator.setSelectedColor(0xFF000000);
indicator.setSelectedBold(true);
}


public static ScheduleFragment newInstance(int currentPage)
{
ScheduleFragment frag = new ScheduleFragment();
Bundle bundle = new Bundle();
bundle.putInt("page", currentPage);
frag.setArguments(bundle);
return frag;
}


@Override
public void onDetach() {
super.onDetach();

try {
Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);

} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}

ScheduleListSubFragment

    public class ScheduleListSubFragment extends Fragment implements OnItemClickListener, UpdateableFragment{

long startDate;
long endDate;


private ListView eventlist;
private listadapter adapter;
private List events;
private MyDB db;



@Override
public void onResume() {

Utils.log("on resume......subfragment");



super.onResume();
}

@Override
public void onSaveInstanceState(Bundle outState) {
Log.v(" OnsaveInstanceState()------------------","oijlkjlijijoij");
super.onSaveInstanceState(outState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

db=new MyDB(this.getActivity());

db.open();
events=db.getScheduleEntries_bytime(getArguments().getLong("start_time"), getArguments().getLong("end_time"));
db.close();
if(events!=null)
{
adapter=new listadapter(getActivity(), android.R.layout.simple_expandable_list_item_1, events);

}
Log.d(" onCreate()------------------sublist schedule","oijlkjlijijoij");

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.eventslist_subfragment_layout, null);

}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(view, savedInstanceState);

Log.d(" onViewCreated()------------------sublist schedule","asdfasdf");// Toast.LENGTH_SHORT).show();

eventlist=(ListView)view.findViewById(R.id.Event_list);
eventlist.setOnItemClickListener(this);
//new updateViewTask().execute(new Object());
fetcheventdata();

}

private class updateViewTask extends AsyncTask<Object, Object, Object>
{

@Override
protected Object doInBackground(Object... params) {
//try{Thread.sleep(2000);}catch(Exception e){e.printStackTrace();}
publishProgress(new Object());
// TODO Auto-generated method stub
return null;
}

@Override
protected void onProgressUpdate(Object... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);

}


}

public static ScheduleListSubFragment newInstance(long starttime, long endtime)
{
ScheduleListSubFragment frag = new ScheduleListSubFragment();
Bundle bundle = new Bundle();

bundle.putLong("start_time", starttime);
bundle.putLong("end_time", endtime);
frag.setArguments(bundle);

return frag;
}



private void fetcheventdata()
{


if(events!=null)
{
eventlist.setAdapter(adapter);

adapter.notifyDataSetChanged();
Utils.log(".list size: subframgment:"+events.size()+"");//, duration)
}
else
Toast.makeText(getActivity(), "No Events Yet", Toast.LENGTH_LONG);

//Toast.makeText(getActivity(), events.size(), Toast.LENGTH_LONG).show();



}


private class listadapter extends ArrayAdapter<Event>
{
private List items;

public listadapter(Context context, int textViewResourceId,
List objects){
super(context, textViewResourceId, objects);
items=new ArrayList();
items=objects;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View v=convertView;

ScheduleEntryViewHolder viewHolder=null;
if(v==null)
{
LayoutInflater vi=(LayoutInflater)getActivity().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
v=vi.inflate(R.layout.schedule_entry, null);

viewHolder = new ScheduleEntryViewHolder();

viewHolder.nameView=(TextView)v.findViewById(R.id.Name);
viewHolder.nameView.setTypeface(Utils.getHeroFace(getActivity().getAssets()));
viewHolder.nameView.setTextColor(getResources().getColor(R.color.black));


viewHolder.roundView=(TextView)v.findViewById(R.id.Round);
viewHolder.roundView.setTypeface(Utils.getHeroFace(getActivity().getAssets()));

Utils.log("entry "+position+"th in listview");

viewHolder.venueView=(TextView)v.findViewById(R.id.Venue);
viewHolder.venueView.setTypeface(Utils.getHeroFace(getActivity().getAssets()));
viewHolder.venueView.setTextColor(getResources().getColor(R.color.darkgrey));

viewHolder.timeView=(TextView)v.findViewById(R.id.time);
viewHolder.timeView.setTextColor(getResources().getColor(R.color.black));


viewHolder.categoryView=(TextView)v.findViewById(R.id.cat_name_view);
viewHolder.favView = (ImageView) v.findViewById(R.id.favourite_view);



v.setTag(viewHolder);
}
else
viewHolder = (ScheduleEntryViewHolder) v.getTag();

ScheduleEntry scheduleentry=(ScheduleEntry)items.get(position);
if(scheduleentry!=null)
{

viewHolder.nameView.setText(scheduleentry.getEventName());
viewHolder.venueView.setText(scheduleentry.getVenue());
viewHolder.roundView.setText("("+scheduleentry.getRoundName()+")");
viewHolder.timeView.setText(Html.fromHtml("<b>"+scheduleentry.getStartTime12()+"-"+scheduleentry.getEndTime12()+"</b><br></br>"+scheduleentry.getStartDate()));

if(scheduleentry.getFav_status().equals("1"))
viewHolder.favView.setVisibility(View.VISIBLE);
else
viewHolder.favView.setVisibility(View.INVISIBLE);

viewHolder.categoryView.setText(scheduleentry.getCategory());
viewHolder.categoryView.setBackgroundColor(Utils.getColorforCategory(scheduleentry.getCategory().toUpperCase(), getActivity()));
}
return v;
}

}


@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
eventnotifierapp app=(eventnotifierapp)getActivity().getApplication();

db.open();
app.crntEvent=db.getEvent( ((ScheduleEntry)events.get(pos)).getEventName() );

db.close();
//startActivity(new Intent(this.getActivity(), EventDescription.class));

EventDescriptionFragment frag = EventDescriptionFragment.NewInstance();
((MainActivity)getActivity()).OpenNextFragment(frag);

}



@Override
public void update(long start, long end) {
Toast.makeText(getActivity(), "finally.... ------------------------------called", Toast.LENGTH_SHORT).show();
fetcheventdata();

}

ScheduleFragmentAdapter

  public class ScheduleFragmentAdapter extends FragmentPagerAdapter{
String cat_name;
protected static final String[] CONTENT = new String[] { "All", "Thursday, Feb 27",
"Friday, Feb 28", "Saturday, Mar 1", "Sunday, Mar 2", };

private List<Fragment> fragments;
private static long startdates[]={day1start, day2start, day3start, day4start};
private static long enddates[]={day1end, day2end, day3end, day4end};

private int mCount = CONTENT.length;
private int mindex=0;


public void setmIndex(int i)
{
mindex=i;
}

public ScheduleFragmentAdapter(FragmentManager fm) {
super(fm);

fragments = new ArrayList<Fragment>();
fragments.add(ScheduleListSubFragment.newInstance(day1start, day4end));
fragments.add(ScheduleListSubFragment.newInstance(day1start, day1end));
fragments.add(ScheduleListSubFragment.newInstance(day2start, day2end));
fragments.add(ScheduleListSubFragment.newInstance(day3start, day3end));
fragments.add(ScheduleListSubFragment.newInstance(day4start, day4end));


}





@Override
public int getItemPosition(Object item) {
Log.v("getItemPosition() callled......", "yeah-----------------");

return super.getItemPosition(item);
}





@Override
public Fragment getItem(int position) {

Log.v("getItem() callled......", "getItem() ...........");
return fragments.get(position);


}

@Override
public int getCount() {
return mCount;
}

@Override
public CharSequence getPageTitle(int position) {
return CONTENT[position % CONTENT.length];
}
}

问题

那么,问题来了。每当我在我的 Activity 中替换 Frame 上的 ScheduleFragment 时,这个 fragment 需要很长时间才能出现。增加你的知识;它几乎挂起主线程。

为了防止这让用户感到厌烦,我制作了一个显示进度条 3 秒的异步任务。但是因为主线程也卡了这3分钟,所以进度条来了也卡了3分钟(意思是圆不转)然后就消失了。

伙计们,请帮我看看我怎样才能使这个 ViewPager 加载变得高效。我所说的高效是指如何异步加载“ScheduleListSubFragment 实例”中的数据,以免主线程卡住。

补充知识

  1. 在我的 ListView 项目中,我有 6 个 textView 和 1 个 ImageView,因此, View 生成可能需要时间。

最佳答案

mPager.setOffscreenPageLimit(4); 替换为 mPager.setOffscreenPageLimit(1); 应该会使第一次加载更快,因为您不需要一次加载 5 个 fragment ,它们将在您滑动时加载。

关于android - ViewPager 花时间加载包含 ListViews 的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25074532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com