mag'lubiyatni dinamik ravishda qanday qilib sozlash

edittext va editText matnini boshqa faoliyatga onClick kodini kiritgan edittext birim bor faoliyati.

Mening savolim: String resurs papkasida 20dan ortiq string nomlari bor, asosiy faoliyatning edittext qiymatiga mos keladigan maxsus satrni ochishim kerak. Muxtasar qilib aytganda, string kodi String bilan mos keladigan textview matnini o'zgartirish kerak


        sylb
        display
        some_large_text
        second mca
        first mca
        second mba>
        second automobile
        Settings

tasvir kodi

public class display extends AppCompatActivity {
        String code;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_display);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            Intent intent = getIntent();
            Bundle extras = intent.getExtras();
            code= extras.getString("keyName");
            TextView textView= (TextView) findViewById(R.id.textapp);

            textView.setText("R.string." + "ds" + code);
        }
    }
5
Agar string kodini Strings faylidan belgilash zarur bo'lsa, javobimdan foydalaning! Xo'sh, aniq nima qilishni xohlaysiz? iltimos, qo'shimcha ma'lumot bering!
qo'shib qo'ydi muallif Atef Hares, manba
qo'shimcha kod parametri sifatida kod o'tish o'rniga. R.string.dsXYZ qiymatini qo'shimcha int resurs sifatida qabul qiling. Keyin int ni boshqa faoliyatingizda oling va textView.setText (resInt); dan foydalaning
qo'shib qo'ydi muallif Mohammed Atif, manba
textView.setText ("R.string" + "ds" + kod); bu satr oddiy matnni r.string.ds deb ko'rsatadi
qo'shib qo'ydi muallif Ravi Kiran, manba

6 javoblar

Bu sizning ishingizni qiladi! " app_name " o'rniga ro'xsat etilgan to'g'ri String kodini kiriting (faqatgina R.string resurs nomini ishlatmang)

Misol: Agar qiymatini olishni istasam

 ItsCharuHereHiFolks

buni qilish kerak

 final TextView textView = (TextView) findViewById(R.id.your_text_view);
 String string = getString(getResId("app_name", R.string.class));
 textView.setText(string);

va

   public static int getResId(String resName, Class<?> c) {

        try {
            Field idField = c.getDeclaredField(resName);
            return idField.getInt(idField);
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }
1
qo'shib qo'ydi
@Mohammed Atif uning talabi mag'lubiyat qiymatini mag'lubiyatga manba nomi bilan ishlatishdir. Savol va "R.string" dan foydalanib nima qilmoqchi ekanligini o'qing. + "ds"
qo'shib qo'ydi muallif Charuක, manba
@Mohammed Atif getIdentifier() umumiy vosita va natijada uning sekinlashishi mumkin. O'zingizning R.java bilan taqqoslaganda n yorsallashtirilgan n-dan foydalanib ishlash ishlashda yaxshiroqdir va siz ba'zi o'rganishga muhtojsiz, ular mavjud bo'lgan qatorlar sonini solishtirmang!
qo'shib qo'ydi muallif Charuක, manba
qo'shib qo'ydi muallif Charuක, manba
@Mohammed Atif men uni oldim, lekin OX uchun R.string.dsAbcXyz kabi identifikatorni bilish kerak, agar bunday bo'lmasa, men yaxshi taklif qilaman, chunki OP OPTIONSni ishlatish bilan kurashayotgan ko'rinadi :)
qo'shib qo'ydi muallif Charuක, manba
Shunday qilib, siz unga mag'lubiyatga manba nomini berishni taklif qilasiz, undan keyin mag'lubiyat idini hisoblab chiqing, keyin yana haqiqiy satrini qiymatini oling, keyin textViewga tayinlang. jiddiymi? Bu mag'lubiyatga tegishli bo'lgan haqiqiy mag'lubiyatni o'tkazib yuboring yoki ushbu mag'lubiyatga mos keladigan qo'shimcha parametr sifatida resifni to'g'ridan-to'g'ri uzating.
qo'shib qo'ydi muallif Mohammed Atif, manba
u boshlang'ich, u sodda vazifani yaxshiroq qilish usullarini bilmasligi mumkin. bu sizning savolingizga javob berishga yordam berish o'rniga, unga javob berishingizni anglatmaydi.
qo'shib qo'ydi muallif Mohammed Atif, manba
Men aslida nimani nazarda tutganimni tushunmaganingizdan aminman. Men ham identifikator nomi bilan tanib olish idini qimmat ish deb bilaman. Lekin R.string.stringName yordamida identifikator identifikatorini olish umumiy vazifangiz bilan taqqoslaganda string uchun maxsus topshiriq uchun juda tezdir.
qo'shib qo'ydi muallif Mohammed Atif, manba

Buni foydalaning

getResources().getIdentifier("ds" + code, "String", getPackageName());
1
qo'shib qo'ydi

Quyidagi koddan foydalaning!

getResources().getString(resId)//resId is R.string.STRING_NAME
0
qo'shib qo'ydi
@AsutoshPanda sizni tushunmaydi! iltimos, qo'shimcha ma'lumot bering
qo'shib qo'ydi muallif Atef Hares, manba

U juda oson. buni o'z sinfida qo'llang

private String getStringResourceByName(String aString) {
      String packageName = getPackageName();
      int resId = getResources().getIdentifier(aString, "string", packageName);
      return getString(resId);
    }

va shunchaki foydalaning

textView.setText(getStringResourceByName("ds" + code));

Yoki yuqoridagi klassdan foydalaning va har qanday satrlarni chiqaring.

Example

  • If you want questions_en from below resource

    Questions

Buni foydalaning

String question=getStringResourceByName("questions_en");

Bundan tashqari getStringResourceByName da string o'rniga tamsayı foydalaning   

</div>

     

Credits.

0
qo'shib qo'ydi

@ Charu javobi id turli xil resurs turlariga tegishli bo'lgan umumiy vazifalarni bajarish uchun etarli va samarali bo'lsa-da, string resurslari nomini bilsangiz va vazifangiz faqat Strings bilan bog'liq bo'lsa, siz hali ham yaxshi echimga ega bo'lishingiz mumkin.

1-qadam

Sizning chaqiriq faoliyatingizda quyidagi kodni ishlating.

Intent intent = new Intent(this, newActivity.class);
intent.putExtra("StringResourceId", R.string.dsAbcXyz); //this step will directly pass the int value of your string resource without any iterations
startActivity(intent);

2-qadam

Keyin newActivity'da quyidagi kodni ishlating.

Intent prevIntent = getIntent();
int resId = prevIntent.getIntExtra("StringResourceId");
textView.setText(resId); //you can directly pass the int id to textview to display the relevant text

Bu yondashuv resourx nomining parametr sifatida topshirilishiga ishonchingiz komil bo'lsa ishlashi mumkin.

     

Lekin siz Server nomi kabi tasodifiy manbalar orqali o'z nomingizni olsangiz   yoki ma'lumotlar bazalari, u holda siz @ Charu ning echimiga rioya qilishingizni tavsiya qilaman.

0
qo'shib qo'ydi

Buni sinashingiz mumkin

textView.setText(getResources().getIdentifier("R.string." + "ds" + code,"string",getPackageName()));
0
qo'shib qo'ydi
Yon suyuqlikda odatda kodning bir satri emas, balki bir necha so'zlarni kiritish mumkin ...
qo'shib qo'ydi muallif mkl, manba