我已经两天都在努力解决这个问题但仍无法找到解决方案,我认为我对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
做点什么。
感谢您的帮助,请原谅我可怜的英语。
答案 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");
}
}