添加 attribute/variable 到 ImageView

Add attribute/variable to ImageView

我想设置一个 ImageView 并想给它保存一个特殊的属性。 所以我用

设置了 ImageView
FrameLayout root1 = (FrameLayout) findViewById(root);
view.setBackgroundResource(R.drawable.seite2);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(50, 8);
root1.addView(view, params);
view.bringToFront();
view.setX(paramsinx);
view.setY(paramsiny);

现在我想为每个视图保存一个属性。例如,通过创建我为每个新视图设置属性名称=树。 稍后,我想将其编辑为例如 name=plant 或 name=blueberry 并从图像中获取名称以识别它或进行一些 if 条件。

我试过标签,但问题是它是针对对象而不是名称或 ID。

编辑输出:

> E/AndroidRuntime: FATAL EXCEPTION: main
>                   Process: com.example.appdesp_seminarsapp_entwicklung20172018, PID: 5319
>                   java.lang.IllegalStateException: Could not execute method for android:onClick
>                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
>                       at android.view.View.performClick(View.java:5610)
>                       at android.view.View$PerformClick.run(View.java:22265)
>                       at android.os.Handler.handleCallback(Handler.java:751)
>                       at android.os.Handler.dispatchMessage(Handler.java:95)
>                       at android.os.Looper.loop(Looper.java:154)
>                       at android.app.ActivityThread.main(ActivityThread.java:6077)
>                       at java.lang.reflect.Method.invoke(Native Method)
>                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
>                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
>                    Caused by: java.lang.reflect.InvocationTargetException
>                       at java.lang.reflect.Method.invoke(Native Method)
>                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
>                       at android.view.View.performClick(View.java:5610) 
>                       at android.view.View$PerformClick.run(View.java:22265) 
>                       at android.os.Handler.handleCallback(Handler.java:751) 
>                       at android.os.Handler.dispatchMessage(Handler.java:95) 
>                       at android.os.Looper.loop(Looper.java:154) 
>                       at android.app.ActivityThread.main(ActivityThread.java:6077) 
>                       at java.lang.reflect.Method.invoke(Native Method) 
>                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
>                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
>                    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object
> android.widget.ImageView.getTag()' on a null object reference
>                       at com.example.appdesp_seminarsapp_entwicklung20172018.Klassisch.angemalt(Klassisch.java:313)
>                       at java.lang.reflect.Method.invoke(Native Method) 
>                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
>                       at android.view.View.performClick(View.java:5610) 
>                       at android.view.View$PerformClick.run(View.java:22265) 
>                       at android.os.Handler.handleCallback(Handler.java:751) 
>                       at android.os.Handler.dispatchMessage(Handler.java:95) 
>                       at android.os.Looper.loop(Looper.java:154) 
>                       at android.app.ActivityThread.main(ActivityThread.java:6077) 
>                       at java.lang.reflect.Method.invoke(Native Method) 
>                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
>                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
> Application terminated.

只有祝酒词和说 "hi" 有效。使用 gettag 时会发生此错误。

String test = (String) img1.getTag();
    Toast.makeText(Klassisch.this, "hi"+test, Toast.LENGTH_LONG).show();

(我创建了一个imageview img1) Edit2:感谢您正确插入代码

您看对了,标签就是您所需要的!

使用 setTag 方法设置您的名字:

String defaultName = "tree";
view.setTag(defaultName);
...
view.setTag("plant");

当您需要它时,只需获取标签值并将其转换为 String

String name = (String) view.getTag();

我在一个测试项目中尝试过。

这行得通,我的问题是: 我使用了全局变量 img1 和 img1.getTag。我在 onCreate 中设置了 img1:test(50,100,img1) 并在顶部声明了 img1。 相反,我现在使用 view.getTag() 并通过参数传递视图。

2.Solution: onCreate中的img1和上面的img1不一样

package com.example.test;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.Toast;public class MainActivity extends AppCompatActivity {ImageView img1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

   ImageView img1 = new ImageView(this); // correct: img1=new ImageView(this) because already defined on top 
    test(50,100,img1);
    getTag(img1);
}

public void test(int paramsinx, int paramsiny, View view) {
    String name= "Marc";
    FrameLayout root1 = (FrameLayout) findViewById(R.id.root);
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(50, 8);
    root1.addView(view, params);
    view.bringToFront();
    view.setX(paramsinx);
    view.setY(paramsiny);
    view.setTag(name);


}
public void getTag(View view) {
    String test = (String) view.getTag();
    Toast.makeText(MainActivity.this, "hi"+test, Toast.LENGTH_LONG).show();//or directly: public void getTag() {
String test = (String) img1.getTag();
Toast.makeText(MainActivity.this, "hi"+test, Toast.LENGTH_LONG).show();
}
}