I'm new with android and java, so sorry if it's a too basic question but I've tried to find a solution in the forums and google and I couldn't.
I have 24 buttons in my layout, all these buttons do something similar so I want to create a generic function. But first I need to know the name (xml id) of he button.
This the XML code of the button:
<Button android:id="@+id/add_04" android:layout_width="42dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="15dp" android:background="@xml/zbuttonshape" android:onClick="onClick" android:text="@string/mas" />
I set android:onClick="onClick" for all the buttons.
In my activity I've create a new function onClick:
This the code I've tried:
public void onClick(View v) { String name = v.getContext().getString(v.getId()); String name2 = context.getString(v.getId()); String name3 = getString(v.getId()); String name4 = getResources().getString(v.getId()); }
But when I try to get the name (in this case "add_04") I always get "false".
Finally I've found a solution with the following code:
import java.lang.reflect.Field; String name5 = null; Field[] campos = R.id.class.getFields(); for(Field f:campos){ try{ if(v.getId()==f.getInt(null)){ name5 = f.getName(); break; } } catch(Exception e){ e.printStackTrace(); } }
My question is if Is not there an easier way to get this ID?
Thanks in advance.
The Android SDK provided a method: findViewById() . Functionality-wise, this method performs a singular task — it will give you the reference to the view in XML layouts by searching its ID. And if nothing is found, it will give you the good old NULL , which is said to be the 1-billion dollar mistake by its creator.
String ID (SID) is a tool that converts strings into fix-sized hashed values, commonly used in games for looking up resources. The hash function is chosen to support string concatenation.
You can create a TextView instance either by declaring it inside a layout XML file or by instantiating it programmatically.
like this:
/** * @return "[package]:id/[xml-id]" * where [package] is your package and [xml-id] is id of view * or "no-id" if there is no id */ public static String getId(View view) { if (view.getId() == View.NO_ID) return "no-id"; else return view.getResources().getResourceName(view.getId()); }
I use this in view constructors to make more meaningful TAGs
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With