3

我在 android 上开发一个应用程序,我正在循环生成 UI 元素。但是我需要这些元素有一个带有字母和数字的 id,例如"rl1"or "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. 与此同时,我正在测试十个,但我无法让它工作。

如果我做错了什么,请原谅我,但我对此并不陌生。

4

2 回答 2

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 (in ) gen/R.java,但是当您选择名称时,您可以为它们分配与您和您的项目相关的东西。因此,您可以使用and ,而不是尝试使用"rl1""rl2"您提到的字符串值。 R.id.rl1R.id.rl2

除了单个 UI 元素,您还可以对字符串 (in res/values/strings.xml) 以及存储在项目res/文件夹下的其他资源(例如图标、媒体文件等)使用相同的技术。对于字符串,您可以访问它们getString(R.string.some_name_given_by_you);

有关更多信息,请参阅Android 开发者网站上的访问资源

于 2012-06-19T15:55:56.903 回答
-2

为什么不尝试使用 SharedPreferences 作为替代方案,以防您想访问您在其他活动中在其他地方提供某些 ID 的元素。

于 2012-06-15T16:08:00.823 回答