如何将Textviews放入数组并findViewById呢?

时间:2015-07-25 05:00:51

标签: java android arrays

我已经两天都在努力解决这个问题但仍无法找到解决方案,我认为我对OOP的基本知识很差。

现在我宣布大约有二十TextView,我想知道有没有办法将TextView存储到数组中,findViewById呢?

我尝试使用数组,如下所示:

public class MainActivity extends Activity {

private TextView name, address;
LinkedHashMap<Integer, TextView> demo = new LinkedHashMap<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int temp;
    allTextview = new TextView[]{name, address};
    for(int i=0; i<allTextview.length; i++){
       temp = getResources().getIdentifier(allTextview[i], "id", getPackageName());
       allTextview[i] = (TextView)findViewById(temp);
    }
}}

此方法导致&#34; name&#34;和&#34; allTextview [0]&#34;不指向同一个对象。 我也使用this solution,但仍然相同。

我认为原因是&#34; name&#34;和&#34;地址&#34;刚刚宣布,并没有指出任何对象,我该如何解决呢?

我想使用循环到findViewById,我可以同时使用&#34; name&#34;和&#34; allTextview [0]&#34;用TextView做点什么。

感谢您的帮助,请原谅我可怜的英语。

1 个答案:

答案 0 :(得分:5)

您需要做的是使用不同的String数组将其用于getIdentifier

这是XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Name"/>

    <TextView
        android:id="@+id/address"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Address"/>

</LinearLayout>

和Actvity文件

public class TestActivity extends Activity{

    private String[] id;
    private TextView[] textViews = new TextView[2];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testactivity);

        int temp;
        id = new String[]{"name", "address"};

        for(int i=0; i<id.length; i++){
           temp = getResources().getIdentifier(id[i], "id", getPackageName());
           textViews[i] = (TextView)findViewById(temp);        
           textViews[i].setText("Text Changed");
        }
    }