PDA

View Full Version : راهنمایی در اسکرول ViewPager



slr560
یک شنبه 19 مرداد 1393, 01:16 صبح
سلام دوستان

اگه با ویو پیجر کار کرده باشید میدونید که وقتی اسکرول میکنید به چپ یا راست یه صفحه بعدشم لود میکنه
فکر میکنم واسه اینه که نرم حرکت کنه
من نمیخوام اینجوری باشه. میخوام با ورود به هر صفحه ای فقط همون صفحه onResume بشه
کسی اطلاعی داره؟

slr560
یک شنبه 19 مرداد 1393, 14:22 عصر
کسی نظری نداره؟

rubiks.kde
یک شنبه 19 مرداد 1393, 21:49 عصر
شما ببین کدهای مربوط به هر صفحه رو در چه جایی نوشتی.هر صفحه اگه فرگمنت هست اون رو تنها از نظر view آماده کنید و در تابع pageChange مربوط به pager به فرگمنت مربوطه بگید تا اطلاعاتش رو لود کنه.

خود page یه تابع داره setOffscreenPageLimit این تایع یه عدد میگیره که تعداد صفحه هایی هست که pager اطلاعاتش رو نگه میداره مثلا اگه 1 باشه تنها توی هر صفحه اطلاعات یکی قبلی و یکی بعدی رو نگه میداره و بعد از اون رو دوباره لود میکنه.

slr560
یک شنبه 19 مرداد 1393, 21:56 عصر
فرگمنت هست
اومدم توی هر پیج از ViewPager یه نمونه گرفتم از فرگمنت ها

این کد فرگمنتی هست که ویو پیجر داخلشه. داخل این ویو پیجر هم ۴تا فرکمنت دیگه لود میشه

package ir.darabifard.daneshjo;


import com.astuetz.PagerSlidingTabStrip;


import android.graphics.Typeface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


import ir.darabifard.daneshjo.otopages.CardManage;
import ir.darabifard.daneshjo.otopages.ChargeActivity;
import ir.darabifard.daneshjo.otopages.OtoFragment;
import ir.darabifard.daneshjo.otopages.ReportReserve;




public class ParentOtoFragment extends Fragment {




PagerSlidingTabStrip tabs;


ViewPager pager;


Adapter mAdapter;


Typeface font;


private String TITLES[] = {"اتوماسیون تغذیه", "شارژ حساب", "گزارش رزرو", "مدیر کارت"};




public ParentOtoFragment() {


}


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


ViewGroup viewGroup = (ViewGroup) inflater
.inflate(R.layout.parent_otofragment, container, false);


font = Typeface.createFromAsset(getActivity().getAssets() , "Yekan.ttf");


pager = (ViewPager) viewGroup.findViewById(R.id.pager_oto);
mAdapter = new Adapter(getChildFragmentManager());
pager.setAdapter(mAdapter);
tabs = (PagerSlidingTabStrip) viewGroup.findViewById(R.id.tabs_oto);


tabs.setViewPager(pager);
tabs.setTypeface(font, 0);
tabs.setIndicatorColorResource(R.color.text_color2 );
tabs.setTextSize(40);
tabs.setTextColorResource(R.color.text_color2);


return viewGroup;
}


private class Adapter extends FragmentPagerAdapter {


public Adapter(FragmentManager fm) {
super(fm);
}


@Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}


@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return OtoFragment.newInstance();
case 1:
return ChargeActivity.newInstance();
case 2:
return ReportReserve.newInstance();
case 3:
return CardManage.newInstance();
default:
return OtoFragment.newInstance();
}
}


@Override
public int getCount() {
return TITLES.length;
}
}


}




الان من اینو به چه صورت باید پیاده سازی کنم؟

rubiks.kde
یک شنبه 19 مرداد 1393, 23:14 عصر
داخل هر فرگمنت کدها رو توی چه تابعی نوشتید؟

slr560
یک شنبه 19 مرداد 1393, 23:35 عصر
داخل هر فرگمنت کدها رو توی چه تابعی نوشتید؟

توی onCreateView
مشکل کجاس؟

slr560
دوشنبه 20 مرداد 1393, 14:06 عصر
من فکر میکنم از نحوه نوشتن آداپتور باشه. درست میگم؟ :متفکر:

rubiks.kde
دوشنبه 20 مرداد 1393, 20:06 عصر
مشکل اینه که کدها رو داخل
onCreateView نوشتید و در زمانی که شی میسازید از اون فرگمنت اولین تابعی که اجرا میشه همینه.
شما توی این تابع تنها بیایید view ها رو اماده کنید و view اصلی اون رو به صورت یک متغییر سراسری در اون فرگمنت قرار بدید.تابعی رو بنویسید که با اطلاعات رو در view نمایش میده و این تابع رو زمانی اجرا کنید که وارد اون فرگمنت میشد(از طرف فرگمنتی که پیچر در ان است اجراش کنید)

slr560
دوشنبه 20 مرداد 1393, 21:04 عصر
مشکل اینه که کدها رو داخل
onCreateView نوشتید و در زمانی که شی میسازید از اون فرگمنت اولین تابعی که اجرا میشه همینه.
شما توی این تابع تنها بیایید view ها رو اماده کنید و view اصلی اون رو به صورت یک متغییر سراسری در اون فرگمنت قرار بدید.تابعی رو بنویسید که با اطلاعات رو در view نمایش میده و این تابع رو زمانی اجرا کنید که وارد اون فرگمنت میشد(از طرف فرگمنتی که پیچر در ان است اجراش کنید)


دقیقا متوجه شدم چی میگی
ولی واقعا نمیدونم چجوری پیاده سازی کنم. یه سوال دیگه . اگه من کدهای صفحه هم رو توی یه تابع بزارم که موقع کشیدن اجرا بشه بازم onCreate اجرا میشه که
این پایین من اومدم کدهامو توی onCreateView نوشتم . یه نمونه از فرگمنت هامه. میشه یه توضیحی رو فرگمنت پایین بدی که من چجوری بنویسمش که بقیه فرگمنت هامو خودم درست کنم؟


package ir.darabifard.daneshjo.otopages;
import com.dd.CircularProgressButton;
import com.gitonway.lee.niftymodaldialogeffects.lib.Effec tstype;
import com.gitonway.lee.niftymodaldialogeffects.lib.Nifty DialogBuilder;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import java.util.Random;
import ir.darabifard.daneshjo.R;


public class CardManage extends Fragment {

TextView mTextView, randomNumber;
Spinner mSpinner;
CircularProgressButton mButton;
Typeface font;
NiftyDialogBuilder mBuilder;

public static CardManage newInstance() {
CardManage cardManage = new CardManage();
return cardManage;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.card_manage, container, false);


font = Typeface.createFromAsset(getActivity().getAssets() , "Yekan.ttf");
mTextView = (TextView) view.findViewById(R.id.txt_card_manage);
mTextView.setTypeface(font);


mSpinner = (Spinner) view.findViewById(R.id.sp_card_manage);
mSpinner.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.card_manage) ));


mButton = (CircularProgressButton) view.findViewById(R.id.btn_card_manage);
mButton.setTypeface(font);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {


mBuilder = NiftyDialogBuilder.getInstance(getActivity());
mBuilder.withEffect(Effectstype.RotateBottom);
mBuilder.withTitle("کارت تغذیه");
mBuilder.withDuration(350);
mBuilder.toDefault();
mBuilder.isCancelableOnTouchOutside(false);
if (mSpinner.getSelectedItemId() == 0) {
mBuilder.withMessage(getResources().getString(R.st ring.alert_card_manage));
} else {
mBuilder.withMessage(getResources().getString(R.st ring.alert_card_manage2));
}
mBuilder.withButton1Text("خیر");
mBuilder.setButton1Click(new View.OnClickListener() {
@Override
public void onClick(View v) {

mBuilder.dismiss();
}
});
mBuilder.withButton2Text("بله");
mBuilder.setButton2Click(new View.OnClickListener() {
@Override
public void onClick(View v) {
mBuilder.dismiss();
new CountDownTimer(2000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
mButton.setIndeterminateProgressMode(true);
mButton.setProgress(1);
}

@Override
public void onFinish() {


mButton.setProgress(100);
randomNumber = (TextView) getActivity()
.findViewById(R.id.randomNumber);
randomNumber.setTypeface(font);
randomNumber.setText(Integer.toString(randNumber(9 999, 1000)));
}
}.start();
}
});

mBuilder.show();
}
});

return view;
}

private int randNumber(int max, int min) {
Random random = new Random();
int rNumber = random.nextInt((max - min) - 1 + min);
return rNumber;
}

}

slr560
چهارشنبه 22 مرداد 1393, 09:53 صبح
کسی نیست یاری کنه؟ :افسرده:

SASAN_AH
چهارشنبه 22 مرداد 1393, 10:00 صبح
از تب استفاده كن در فرگمنت

slr560
چهارشنبه 22 مرداد 1393, 10:02 صبح
از تب استفاده كن در فرگمنت

یکم بیشتر توضیح بده؟ تب چی؟

mamalirize
پنج شنبه 02 بهمن 1393, 17:34 عصر
سلام دوستان
من میخوام رنگ پس زمینه تب ها رو عوض کنم
راهنمایی میفرمایید