将findViewById与字符串一起使用

时间:2014-12-16 17:05:07

标签: android textview

我在android工作,

在我的应用程序中,我可以选择添加TextViews。

我最多可以有5个TextView,其ID为 - Number1,Number2,Number3等。

我在main_activity.xml中直接设置了第一个ID,其余的是资源文件

<resources>
    <item type="id" name="Number2" />
    <item type="id" name="Number3" />
    <item type="id" name="Number4" />
    <item type="id" name="Number5" />
</resources>

我有当前的文字视图数量。

我正在寻找一种只使用当前文本视图数量来访问textview的好方法。

我的意思是,

而不是

switch (TextViewNumber) {
    case 2:
        findViewById(R.id.Number2);
        break;
    case 3:
        findViewById(R.id.Number3);
        break;
    case 4:
        findViewById(R.id.Number4);
        break;

    }

我想在一些通用中使用TextViews( TextViewNumber )的数量,以更好的性能方式..

设置TextView时遇到同样的问题:

switch (TextViewNumber) {
    case 2:
        newTextView.setId(R.id.IngredientNumber2);
        break;
    case 3:
        newTextView.setId(R.id.IngredientNumber3);
        break;
    case 4:
        newTextView.setId(R.id.IngredientNumber4);
        break;

    }

处理移动视图的类:

public class LayoutOrganizer {

    public static RelativeLayout.LayoutParams getRelativeLayoutParams(int TExtViewCount, TextView textView) {
        RelativeLayout.LayoutParams myLayoutParams = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

            myLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

            // this is where I need to access the view ID
            myLayoutParams.addRule(RelativeLayout.BELOW, ViewID); 

        return myLayoutParams;
    }
 }

有关更好地使用TextViewNumber的任何想法吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

TextView textView = this.findViewById(this.getResources().getIdentifier("Number" + TextViewNumber, "id", this.getPackageName()));

请注意,Resources#getIdentifier(String, String, String)可以返回0,这是一个无效的ID。

答案 1 :(得分:0)

您可以将它们全部放入onCreate中的数组中。

private ArrayList<TextView> textviews = new ArrayList<TextView>(textViewCount);    

@Override
protected void onCreate(Bundle savedInstanceState)
{
    textViews.add(findViewById(R.id.Number1));
    textViews.add(findViewById(R.id.Number2));
    ...

    // Then access them using a number
    Textview textView2 = textViews.get(1);
}

或者,如果他们都是父视图中的兄弟姐妹,您可以使用parent.getChildAt(textViewIndex);

通过viewIndex访问它们