PDA

View Full Version : مشکل در نمایش تب ها



mnakhaeipoor
شنبه 02 خرداد 1394, 14:29 عصر
سلام دوستان
یه سوال توی Stack Overflow (http://stackoverflow.com/questions/30352145/how-to-condition-tabs-to-be-added-to-action-bar-or-not) پرسیدم هیچکس جوابمو نداد:گریه::گریه:
جوابش هم خیلی خیلی برام حیاتی هست اخه دارم برا جایی اپ طراحی میکنم و الانم مثل خر تو گل گیر کردم:افسرده:
هر چی هم باش ور رفتم به نتیجه نرسیدم:عصبانی++:
میخواستم ببینم که کسی از دوستان میتونه بزرگی کنه و منو برا حلش راهنمایی کنه؟
هر نرخی هم باشه پیام خصوصی بدید پرداخت میکنم :چشمک:

sparrow.ali
شنبه 02 خرداد 1394, 14:30 عصر
مشکل چیه دوست من؟

JYasProgramer
شنبه 02 خرداد 1394, 16:15 عصر
مشکل رو بگید دوست من

mnakhaeipoor
دوشنبه 04 خرداد 1394, 13:48 عصر
من 5 تا column توی دیتابیسم دارم که میخوام مقادیرشون توی 5 تا Tab به نمایش در بیان
خب تا اینجای کار که همه چیز روبه راهه اطلاعات رو از دیتابیس میخونیم و توی 5 تا فراگمنت نشونشون میدیم و بعد هم 5 تا تب رو ایجاد میکنیم
اما مشکل اینجاست که من میخوام اگر توی یکی از column ها مقدار "empty" وارد شده بود تب مربوط به اون column دیگه نمایش داده نشه
من از استراتژی زیر برای انجام این کار استفاده کردم و کار هم میکنه اما اسم تب ها رو به هم ریخته نشون میده!

public class Content extends FragmentActivity implements ActionBar.TabListener {

//Gcontent yek parceable hast ke havi object database hast
private Gcontent g;
private String g_name;
private String g_family;
private String g_about;
private String g_age;
private String g_father;


private ActionBar actionBar;
private ViewPager viewPager;
private TabsPagerAdapter tabsAdapter = new TabsPagerAdapter(getSupportFragmentManager());




@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pc_content);

//in intent az yek activity dige ersal shode ke havi object parceable hast
g = (Gcontent) getIntent().getExtras().get("CurrMember");
//ina ham maghadir column haye database hastan ke darim az parceable vakeshi mikonimeshoon
g_name = g.getGname();
g_family = g.getGfamily();
g_about = g.getGabout();
g_age = g.getGstory();
g_father = g.getGfather();


viewPager = (ViewPager) findViewById(R.id.tabs_container);
viewPager.setAdapter(tabsAdapter);


actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_M ODE_TABS);
actionBar.setHomeButtonEnabled(false);




if(!(g_name.equals("empty"))){
actionBar.addTab(
actionBar.newTab().
setText("first tab").
setTabListener(this)
);
}


if(!(g_family.equals("empty"))){
actionBar.addTab(
actionBar.newTab().
setText("second tab").
setTabListener(this)
);
}


if(!(g_about.equals("empty"))){
actionBar.addTab(
actionBar.newTab().
setText("third tab").
setTabListener(this)
);
}


if(!(g_age.equals("empty"))){
actionBar.addTab(
actionBar.newTab().
setText("fourth tab").
setTabListener(this)
);
}


if(!(g_father.equals("empty"))){
actionBar.addTab(
actionBar.newTab().
setText("fifth tab").
setTabListener(this)
);
}


viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {


@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);


}


@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub


}


@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub


}
});


viewPager.setOnTouchListener(new View.OnTouchListener() {


@Override
public boolean onTouch(View v, MotionEvent event) {
viewPager.getParent().requestDisallowInterceptTouc hEvent(true);
return false;
}
});


}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
return super.onOptionsItemSelected(item);
}


@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub


}


@Override
public void onTabSelected(Tab tab, FragmentTransaction arg1) {
viewPager.setCurrentItem(tab.getPosition());


}


@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub


}
}

این هم pager adapter :

public class TabsPagerAdapter extends FragmentPagerAdapter {


int count;


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


@Override
public Fragment getItem(int index) {
switch(index){
case 0 :
return new FragmentFirst();
case 1 :
return new FragmentSecond();
case 2 :
return new FragmentThird();
case 3 :
return new FragmentFourth();
case 4 :
return new FragmentFifth();
}
return null;
}


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


}

mnakhaeipoor
سه شنبه 05 خرداد 1394, 18:18 عصر
کیست که مرا یاری کند ؟؟ :ناراحت:

JYasProgramer
سه شنبه 05 خرداد 1394, 22:54 عصر
من دقیق نمیتونم جوابتو بدم اما میتونم حرفی بگم که شاید ایده بده بت
در متد

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



به جای اینکه یه عدد ثابت تعریف کنی یه مقدار پویا رو تعریف کن مثلا تعداد ستون های مورد نظرتو از دیتابیس بگیر و در یک لیست بریز و سپس در این متد تعداد لیست رو برگردون، این برای نمایش تب ها به تعداد ستونهای دیتابیست
و اما


...اسم تب ها رو به هم ریخته نشون میده!

اینجا رو متوجه نشدم منظورت دقیقا چیه؟؟؟؟

mnakhaeipoor
چهارشنبه 06 خرداد 1394, 08:06 صبح
من دقیق نمیتونم جوابتو بدم اما میتونم حرفی بگم که شاید ایده بده بت
در متد

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



به جای اینکه یه عدد ثابت تعریف کنی یه مقدار پویا رو تعریف کن مثلا تعداد ستون های مورد نظرتو از دیتابیس بگیر و در یک لیست بریز و سپس در این متد تعداد لیست رو برگردون، این برای نمایش تب ها به تعداد ستونهای دیتابیست
و اما

اینجا رو متوجه نشدم منظورت دقیقا چیه؟؟؟؟
آره دقیقا کاری که باید انجام بشه همینه که گفتید یعنی تعداد ستون هایی که عبارت "empty" داخلشون نیست رو بگیرم بعد داخل متد getCount برگردونمشون امانمیدونم چجوری اگه یه مثال بزنید فک کنم کارم راه بیفته
منظورم از این که اسم تب ها رو به هم ریخته نشون میده اینه که مثلا من پنج تا ستون دارم به نام های A و B و C و D و E و متعاقبا پنج تا تب هم دارم به نام های A و B و C و D و E
اما وقتی من مثلا توی ستون های B و D مقدار empty رو قرار میدم تعداد تب ها به جای پنج تا 3 تا میشن (یعنی تا اینجای کار درست بوده) اما اون سه تا اسماشون به هم ریخنه هست یعنی به جای این که باشن A و C و E میشن A و E و D !

JYasProgramer
چهارشنبه 06 خرداد 1394, 08:50 صبح
مثلا نام تب ها رو می ریزم داخل یک لیست

List<String> tabList = {"A", "B", "C", "D", "E"}

حالا

@Override
public int getCount() {
return tabList.size();

}



به جای اینکه شما بیایین به لیست مقادیر ثابتی تعریف کنید مقادیر دریافتی از دیتابیس رو تعریف میکنید
برای هر ستون چک کن که آیا فیلد مورد نظر خالیه یا نه، اگه خالی بود نریزه در لیست و اگه نبود آره،سپس لیست رو ارسال می کنی به متد getCount و در نهایت با متد size() تعدادشو فراخونی میکنی

برای افزودن یک ایتم به لیست

tabList.add("A");