简体   繁体   English

从Android可绘制资源名称中检索Java字符串

[英]Retrieve Java string from Android drawable resource name

I have an array of drawable png files like this : 我有一个这样的可绘制png文件数组:

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

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

How can I get something like this: 我如何获得这样的东西:

String imageName = "alabama"

I tried this, but it returns my Image View id instead of the src name. 我试过了,但是它返回了我的Image View ID而不是src名称。

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

UPDATE This is more of my code to get things in context. 更新这是我更多的代码来获取上下文信息。 I have adapted an answer below, but i get an error: incompatible types: String cannot be converted to int. 我在下面改编了一个答案,但是出现错误:不兼容的类型:字符串无法转换为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;
    }

You are receiving id of View because you are passing id of View to 您正在接收View的ID,因为您要将View的ID传递给

getResourceEntryName(int resid)

If you want to get String imageName = "alabama" pass to method id of drawable, not ImageView 如果要获取String imageName = "alabama"传递给drawable的方法ID,而不是ImageView

But there is no way to check what resource id was set to image view because under the hood Drawable was created from passed id. 但是无法检查将哪些资源id设置为图像视图,因为Drawable是通过传递的id创建的。

Fortunately you can use hImageViewPic.setTag(Object object) to read it later. 幸运的是,您可以使用hImageViewPic.setTag(Object object)稍后再阅读。

So the code may look like: 因此,代码可能类似于:

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);

Later you can get the name of image by using: hImageViewPic.getTag() 稍后,您可以使用以下图片获取图片的名称: hImageViewPic.getTag()

In my opnion this is better you use array of string images name like: 在我看来,最好使用字符串图像名称数组,例如:

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

then get id of images like: 然后获取图像的ID,例如:

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

Where "this" is an Activity, written just to clarify. 其中“ this”是一个活动,仅用于阐明。 then you can set tag for image and set id for your imageview like: 那么您可以为图片设置标签并为imageview设置ID,例如:

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

I hope this can help! 希望对您有所帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM