簡體   English   中英

如何將字符串轉換為類Name,反之亦然

[英]How to convert a string to class Name and vice versa

我有許多活動是由超類管理的(Main1,Main2 ... Mainn),所以我想做的但失敗的是通過一個按鈕(nextPage)從Main i移至Main i + 1,並按順序進行不重復相同的代碼n次,我嘗試將ClassName轉換為Integer以獲得其數字(i),然后我將該數字(i + 1)連接為字符串,然后將字符串轉換為Class類型以調用它從按鈕(nextPage)。 這是代碼:我編輯了代碼,這是運行良好的解決方案:

str = getClass().getName();// this code line converts the class name to string
    int num = Integer.parseInt(str.substring(str.indexOf("_") + 1)); //this extracts integer from string

    str1 = "com.example.Test.Main_" + (num + 1);//this is a pure concatenation
    str2 = "com.example.Test.Main_" + (num - 1);//this is a pure concatenation

    try {
        nextClass = Class.forName(str1);// this how to convert string to a class name

        i10.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(), nextClass);
                startActivity(i);
                str = nextClass.getName();
                overridePendingTransition(R.anim.pushin, R.anim.pushout);

            }
        });

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

查找Integer.parseInt(String)的文檔:字符串中的字符必須全部為十進制數字

如果要獲取當前的類名,則應使用以下命令:

String str = getClass().getName();

現在str是Main1,Main2,...。 因此您無法解析它,因為它不是String。 您可以使用以下格式重命名您的類:Main_1,Main_2等,然后更改代碼:

int num = Integer.parseInt(str.substring(str.indexOf("_") + 1));
str1="Main_"+(num+1);
Class nextClass=Class.forName("com.example.Test."+ str1);

試試這個代碼。 應該管用

String str = getClass().toString();
Integer num = Integer.parseInt(str.replaceAll("\\D+",""));
str1="Main"+ String.valueOf(num+1);
Class<?> nextClass;
    try {
        nextClass = Class.forName("com.example.Test" + str );


    i10.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(getApplicationContext(), nextClass);
            startActivity(i);
            overridePendingTransition(R.anim.pushin, R.anim.pushout);

        }
    });

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM