PDA

View Full Version : بار کردن یک آیتم موجود در فایل استرینگز داخل تکست ویو



sco1385
دوشنبه 22 اردیبهشت 1393, 11:30 صبح
دوستان!

من یک اکتیویتی دارم. با یک تکست ویو و دو دکمه "قبلی" و "بعدی" در زیر آن.

حال می‌خواهم هر بار با زدن دکمه‌ها، نام یک کتاب که به صورت یک عبارت در فایل استرینگ موجود است، در تکست ویو نمایش داده شود.

چه روشی را در پیش بگیرم؟

shahin bahari
دوشنبه 22 اردیبهشت 1393, 11:33 صبح
تو فایل string.xml یه آرایه از لیست کتاب ها بسازید. بعد توی اکتیویتی اون آرایه رو لود کنید و براساس ایندکس ایتم مورد نظر رو نشون بدید.

sco1385
سه شنبه 23 اردیبهشت 1393, 08:42 صبح
استادان گرامی.

با چند خط کد راه را نشان دهید.

اگر مرجعی برای مطالعه هم باشد ممنون می‌شوم.

shahin bahari
سه شنبه 23 اردیبهشت 1393, 13:24 عصر
این طوری آرایه توی string.xml تعریف کنید.
<string-array name="items">
<item>item1</item>
<item>item2</item>
<item>item3</item>
</string-array>

توی جاوا هم به این شکل لود کنید:
String items[]=getActivity().getResources().getStringArray(R.arr ay.items);
حالا بسته به اینکه کدوم عضو از این آرایه رو میخواید نمایش میدید

sco1385
چهارشنبه 31 اردیبهشت 1393, 14:32 عصر
با تشکر از شما

من برای نام تب‌ها، در یک اپ، که به صورت تب استرایپ است، یعنی یک اکتیویتی که دارای چند فرگمنت است، و در بالا هم نام تب‌ها ظاهر می‌شود، یک آرایه در فایل استرینگ درست کردم.

حالا می‌خواهم این آرایه را در فایل جاوا، که یک آداپتور است به نام MyFragmentPagerAdapter معرفی کنم. با چه دستوری معرفی کنم.

از دستور شما استفاده کردم جواب نمی‌دهد.



String items[]=getActivity().getResources().getStringArray(R.arr ay.items);


لطف کنید و راهنمایی کنید.

sco1385
جمعه 02 خرداد 1393, 02:12 صبح
استادان عزیز


لطف کنید و راهنمایی کنید.

#root#
جمعه 02 خرداد 1393, 10:24 صبح
بیسوادان عزیز


لطف کنید و راهنمایی کنید.


الان مشکل شما تو نمایش متن اصلیتون هستش؟ کدهای آداپتر و fragment رو بزارید.

sco1385
شنبه 03 خرداد 1393, 01:35 صبح
در همین انجمن خواندم که هشدار داده بودند که نام‌های فارسی را در فایل جاوا نگذارید.

یعنی اگر یک آرایه دارید، که آیتم‌های آن فارسی است، آرایه را در استرینگ درست کنید و در جاوا به آن آرایه لینک بدهید.

خب حرف کاملاً درستی است، بویژه اگر برنامه چند زبانه باشد.

من این آرایه را در استرینگ ساختم:



<string-array name="tab_titles">
<item>سیاسی</item>
<item>اجتماعی</item>
<item>فرهنگی</item>
<item>اقتصادی</item>
<item>نظامی</item>
<item>هنری</item>
<item>مردمی</item>
<item>مقالات</item>
<item>فهرست</item>
</string-array>


و با این کد آن را در فرگمنت معرفی کردم:



String items[]=getActivity().getResources().getStringArray(R.arr ay.items);


روی این قسمت اخطار می دهد:



getActivity()


ممنون

shahin bahari
یک شنبه 04 خرداد 1393, 16:16 عصر
ببخشید چند روزی نمی تونستم جواب بدم .
شما نیاز به context برنامه دارید حالا این context هرجا یه جوری باید بدست بیاد. توی Fragment ها با getActivity , توی اکتیویتی با this و....

sco1385
یک شنبه 04 خرداد 1393, 16:21 عصر
خواهش می‌کنم و قربان لطفت

برنامه من از روش "پیجر تب اسرایپ" PagerTabStrip استفاده می‌مند و این معرفی باید در آداپتور صورت بگیرد.

این استرینگ الان به صورت فارسی در آداپتور قرار دارد.

shahin bahari
دوشنبه 05 خرداد 1393, 00:21 صبح
خوب ببینید توی تابع سازنده آداپتور معمولا context برنامه رو هم قرار میدن به این شکل:

public MyAdapter(Context c){
this.context=c;
}

توی کلاس آداپتر یه متغییر private Context context می سازید و توی تابع سازنده همون طور که بالا نوشتم ذخیره میکنید. حالا هر جایی نیاز به context بود از همین متغییر استفاده میکنید.
توی اکتیویتی و یا فرگمنت هم که این آداپتور ساخته میشه context رو this و یا getActivity() قرار میدید.
اگر باز مبهم بود کد آداپتور رو بزارید که روی کد های خودتون بگم.

sco1385
دوشنبه 05 خرداد 1393, 01:12 صبح
این آداپتور :



import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;


public class MyFragmentPagerAdapter extends FragmentPagerAdapter {


public static final int NUMBER_OF_FRAGMENTS = 13;



// String tab_titles[]=getActivity().getResources().getStringArray(R.arr ay.tab_titles);

// ساخت یک آرایه از نوع استرینگ برای نام تب‌ها
private String tab_titles[] = new String[] {"book1", "book2", "book3", "book4", "book5", "book6", "book7", "book8", "book9", "book10", "book11", "book12", "book13"};




// کانستراکتر
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);


}


//Return total pages, here one for each data item
@Override
public int getCount() {
return NUMBER_OF_FRAGMENTS;
}


// متد جاگذاری فرگمنت‌ها در ویو پیجر
@Override
public Fragment getItem(int position) {

switch (position) {

case 0:
book01 mybook01 = new book01();
return mybook01;

case 1:
book02 mybook02 = new book02();
return mybook02;

case 2:
book03 mybook03 = new book03();
return mybook03;

case 3:
book04 mybook04 = new book04();
return mybook04;

case 4:
book05 mybook05 = new book05();
return mybook05;

case 5:
book06 mybook06 = new book06();
return mybook06;

case 6:
book07 mybook07 = new book07();
return mybook07;

case 7:
book08 mybook08 = new book08();
return mybook08;

case 8:
book09 mybook09 = new book09();
return mybook09;

case 0:
book10 mybook10 = new book10();
return mybook10;

case 10:
book11 mybook11 = new book11();
return mybook11;


case 11:
book12 mybook12 = new book12();
return mybook12;


case 12:
book13 mybook13 = new book13();
return mybook13;


}
return null;
}


// قرار دادن نام تب‌ها
@Override
public CharSequence getPageTitle(int position) {
return tab_titles[position];
}


}

shahin bahari
دوشنبه 05 خرداد 1393, 21:06 عصر
من معمولا آداپتور پیجر رو تو همون کلاس اکتیویتی میسازم. اینجوری به context به راحتی دسترسی دارم. حالا که جداست context رو جداگانه براش میفرستیم. قسمتی از کدتون که تغییر میکنه:
String tab_titles[];//=getActivity().getResources().getStringArray(R.arr ay.tab_titles);

// کانستراکتر
public MyFragmentPagerAdapter(FragmentManager fm,Context c) {
super(fm);
tab_titles=c.getResources().getStringArray(R.array .tab_titles);

}

کاری که کردم این بود که توی constructor علاوه بر Fragment Manager که آرگومان اصلی هست Context رو هم فرستادم که از طریق اون به ریسورس های برنامه دسترسی پیدا کنم. حالا توی اکتیویتی به کمک MyActivity.this تابع سازنده رو مقدار دهی میکنید. MyActivity.this توی اکتیویتی همون Context هست.
-------------------------------------------------------------------
یه راه دیگه هم توی کد شما این هست که آرایه رو تو همون اکتیویتی بسازید و اون رو به شکل آرگومان به این کلاس بدید (همون طور که تو مثال قبل Context رو دادیم). در عمل هیچ فرقی با روش قبل نداره.

sco1385
دوشنبه 05 خرداد 1393, 22:38 عصر
با تشکر از شما، مشکل در آداپتور حل شد.

حالا به خاطر همان تغییری که در کانستراکتر دادید، در فایل مین اکتیویتی، در پارامتر نیاز به تغییر دارد.

چگونه این تغییر را در این خط ایجاد کنم؟:



MyFragmentPagerAdapter myAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager() );


ممنون

shahin bahari
دوشنبه 05 خرداد 1393, 23:41 عصر
اگر داخل اکتیویتی استفاده میکنید:
MyFragmentPagerAdapter myAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager() ,this );
اگر داخل فرگمنت هستید:
MyFragmentPagerAdapter myAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager() ,getActivity() );

sco1385
دوشنبه 05 خرداد 1393, 23:44 عصر
بسیار بسیار سپاسگذارم.

زحمت کشیدید.

مشکل حل شد. و الان نام تب‌ها که فارسی است، از یک آرایه‌ی موجود در فایل استرینگ خوانده می‌شود.

زنده باشید

sco1385
دوشنبه 05 خرداد 1393, 23:48 عصر
شاهین جان

کد اول شما را استفاده کردم درست شد.

ممنون عزیز