簡體   English   中英

從Android可繪制資源名稱中檢索Java字符串

[英]Retrieve Java string from Android drawable resource name

我有一個這樣的可繪制png文件數組:

int[] images = {R.drawable.alabama, R.drawable.alaska, R.drawable.arizona};

currentImage++;
currentImage = currentImage % images.length;
hImageViewPic.setImageResource(images[currentImage]);

我如何獲得這樣的東西:

String imageName = "alabama"

我試過了,但是它返回了我的Image View ID而不是src名稱。

String imageName = getResources().getResourceEntryName(R.id.idImageViewPic);

更新這是我更多的代碼來獲取上下文信息。 我在下面改編了一個答案,但是出現錯誤:不兼容的類型:字符串無法轉換為int。

public class GameFragment extends Fragment {

    private AlertDialog mDialog;
    private ImageView hImageViewPic;
    private Button iButton, gButton;

    private int currentImage = 0;
    int[] images = {R.drawable.alabama, R.drawable.alaska, R.drawable.arizona};

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_game, container, false);
        hImageViewPic = (ImageView) rootView.findViewById(R.id.idImageViewPic);
        iButton = (Button) rootView.findViewById(R.id.guess_button);

        final EditText responseField = (EditText) rootView.findViewById(R.id.ResponseText);



        // Handle buttons here...
        View guessButton = rootView.findViewById(R.id.guess_button);
        guessButton.setOnClickListener(new View.OnClickListener() {
            int score = 0;

            @Override
            public void onClick(View view) {
                AlertDialog.Builder builder =
                        new AlertDialog.Builder(getActivity());
                String response = responseField.getText().toString();
                String wrongTextAnnouncement = getString(R.string.wrong_text, response);

                int resourceId = images[currentImage];
                String name = getResources().getResourceEntryName(resourceId);
                hImageViewPic.setImageResource(resourceId);
                hImageViewPic.setTag(name);
                String imageName = hImageViewPic.getTag(name);

                Log.d("UT3", response);
                Log.d("UT3", wrongTextAnnouncement);
                Log.d("UT3", imageName);
                if (imageName != response) {
                    builder.setTitle(R.string.wrong_title);
                    builder.setMessage(wrongTextAnnouncement);
                    builder.setCancelable(false);
                    builder.setPositiveButton(R.string.ok_label,
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface,
                                                    int i) {
                                    // nothing
                                }
                            });
                    mDialog = builder.show();
                } else {
                    builder.setTitle(R.string.right_title);
                    builder.setMessage(R.string.right_text);
                    builder.setCancelable(false);
                    builder.setPositiveButton(R.string.ok_label,
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface,
                                                    int i) {
                                    // nothing
                                }
                            });
                    score += 10;
                    String scoreString = String.valueOf(score);
                    Log.d("UT3", scoreString);
                }
                mDialog = builder.show();
                currentImage++;
                currentImage = currentImage % images.length;
                hImageViewPic.setImageResource(images[currentImage]);
            }
        });
        return rootView;
    }

您正在接收View的ID,因為您要將View的ID傳遞給

getResourceEntryName(int resid)

如果要獲取String imageName = "alabama"傳遞給drawable的方法ID,而不是ImageView

但是無法檢查將哪些資源id設置為圖像視圖,因為Drawable是通過傳遞的id創建的。

幸運的是,您可以使用hImageViewPic.setTag(Object object)稍后再閱讀。

因此,代碼可能類似於:

int[] images = {R.drawable.alabama, R.drawable.alaska, R.drawable.arizona};

currentImage++;
currentImage = currentImage % images.length;
int resourceId = images[currentImage];
String name = getResources().getResourceEntryName(resourceId);
hImageViewPic.setImageResource(resourceId);
hImageViewPic.setTag(name);

稍后,您可以使用以下圖片獲取圖片的名稱: hImageViewPic.getTag()

在我看來,最好使用字符串圖像名稱數組,例如:

String[] imagesTitle = {alabama, alaska,arizona};

然后獲取圖像的ID,例如:

String imageName = imagesTitle[currentImage];
int drawableResourceId = this.getResources().getIdentifier(imageName,"drawable", this.getPackageName())

其中“ this”是一個活動,僅用於闡明。 那么您可以為圖片設置標簽並為imageview設置ID,例如:

hImageViewPic.setImageResource(drawableResourceId);
hImageViewPic.setTag(imageName);

希望對您有所幫助!

暫無
暫無

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

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