我正在开发一个Android应用程序,我正在循环生成UI元素。但我需要这些元素带有字母和数字的ID,例如"rl1"
或"rl2"
。我试图使用方法RelativeLayout.setId()
,但该方法只接受int
。有没有办法可以设置我想要的ID而不限于数字?
感谢。
以下是我正在尝试的代码。
for (int i=1; i < 10; i++)
{
//gets the frameview where the elements will be created.
String LinearLayoutId = "frameview1";
int resID = getResources().getIdentifier(LinearLayoutId, "id", "com.myapp.ERS");
LinearLayout linearLayout = (LinearLayout)findViewById(resID);
//creates the RelativeLayout that will hold the ImageIcon and the TextView
RelativeLayout rl = new RelativeLayout(this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,40 );
rl.setLayoutParams(lp);
rl.setId("rl"); /// >>>> I would like here to set and ID of "rl1" for example.
rl.setBackgroundDrawable(getResources().getDrawable(R.drawable.bk36));
//creates the image icon within the layout at the left side
ImageView image = new ImageView(this);
lp = new RelativeLayout.LayoutParams(
40,RelativeLayout.LayoutParams.MATCH_PARENT );
image.setLayoutParams(lp);
String imageicon = "icon_"+i;
resID = getResources().getIdentifier(imageicon, "drawable", "com.myapp.ERS");
image.setImageDrawable(getResources().getDrawable(resID)); //sets the icon
rl.addView(image); //adds the ImageView to the relative layout
//creates the TextView within the layout with a 40 margin to the left
TextView tv = new TextView(this);
lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT );
lp.setMargins(40, 0, 0, 0);
tv.setLayoutParams(lp);
String textViewID = "tv"+i;
resID = getResources().getIdentifier(textViewID, "string", "com.myapp.ERS");
tv.setText(getResources().getString(resID));
tv.setTextColor(Color.BLACK);
tv.setTextSize(25);
rl.addView(tv);//adds the TextView to the relative layout
rl.setOnClickListener(mAddListener);
linearLayout.addView(rl);//adds the RelativeLayout to the LinearLayout
}
然后我有像这样的OnCLickListener ......
private OnClickListener mAddListener = new OnClickListener()
{
public void onClick(View v){
Intent intent;
Bundle bundle;
String id = getResources().getResourceEntryName(v.getId());
id = id.replaceAll("\\D+","");
int value = Integer.parseInt(id);
intent = new Intent(ERS.this, ShowInfo.class);
bundle = new Bundle();
bundle.putInt("key", value);
System.out.println(v.getId());
intent.putExtras(bundle);
startActivity(intent);
}
};
我试图设置数字ID,但是当我用以下内容查找它们时:
String id = getResources().getResourceEntryName(v.getId());
找不到它们。
我开始使用xml
文件中的所有内容,但它真的很长,因为列表中有大约四十个项目,而且我更改一个字母就很复杂了。他们都是。我提出了这个想法,以便在for loop
中在运行时生成它们。我正在测试十个,但我不能让它工作。
如果我做错了什么,请原谅我,但我是新手。
答案 0 :(得分:0)
您仍然可以更轻松地返回XML
布局并使用R class
生成有意义的ID。虽然您没有包含问题末尾提到的原始xml
文件,但我只能猜测您遇到的问题。它确实符合该法案,并允许您创建以下内容:
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:id="@+id/hellotextview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Hi there"/>
android:id="@+id/hellotextview"
生成一个可在项目中的其他位置使用的ID。在您的Java代码中,您可以访问具有类似于:
TextView
TextView helloText = (TextView) findViewById(R.id.hellotextview);
R.id.hellotextview
是在构建项目时自动生成的int(gen/R.java
),但是当您选择名称时,可以为它们分配与您和项目相关的内容。因此,您可以使用"rl1"
和"rl2"
,而不是尝试使用您提到的R.id.rl1
和R.id.rl2
等字符串值。
除了单独的UI元素,您还可以对字符串(在res/values/strings.xml
中)使用相同的技术,并在项目的res/
文件夹下存储其他资源,例如图标,媒体文件等。 。对于字符串,您可以访问它们getString(R.string.some_name_given_by_you);
有关详细信息,请参阅Android开发者网站上的Accessing Resources。
答案 1 :(得分:-2)
为什么不尝试使用SharedPreferences作为替代方法,以防您想要访问在其他活动的其他位置提供某些ID的元素。