API级别: 12(Android 3.1)
应用背景:通过我的Android应用,我向我们的网络服务器MySQL数据库发送请求以检索公司。所有这一切都很好。最初我将返回的数据填充到ListView
,但是为了获得视觉,我的老板更喜欢我有6 TextView
个均匀分布。 (此应用程序仅适用于一台设备,三星Galaxy Tab 10.1)
问题:因此,在解析返回的数据时,我有一个for
循环。我想做的是自动增加一个变量,即company_ + i
然后i++
。这在Java中是可行的还是有更好的方法?
以下是我认为它如何运作的示例:
int length = 5;
//parse JSON data
try{
JSONArray jArray = new JSONArray(result);
for(int i=0; i < length; i++){
TextView company = (TextView)findViewById(R.id.company_ + i);
JSONObject jObject = jArray.getJSONObject(i);
String businessName = jObject.getString("businessName");
double distance = jObject.getDouble("distance");
double distRound = 1e5;
double roDistance = Math.round(distance * distRound) / distRound;
company.setText(businessName);
company.append(Html.fromHtml("<br>"));
company.append("Approximate distance: " + roDistance + " feet.");
错误抛出: The operator + is undefined for the argument type(s) TextView, int
。这是有道理的,但我习惯在PHP中工作,我经常这样做。
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/location_select"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/row_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="2" >
<TextView
android:id="@+id/company_1"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_gravity="top|left"
android:layout_weight="1"
android:textIsSelectable="true"
android:textSize="25sp" />
<TextView
android:id="@+id/company_2"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_gravity="top|right"
android:layout_marginTop="0dp"
android:layout_weight="1"
android:textIsSelectable="true"
android:textSize="25sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/row_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="2"
android:layout_below="@id/row_2" >
<TextView
android:id="@+id/company_3"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_gravity="bottom|left"
android:layout_marginLeft="0dp"
android:layout_weight="1"
android:textIsSelectable="true"
android:textSize="25sp" />
<TextView
android:id="@+id/company_4"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_gravity="bottom|right"
android:layout_marginRight="0dp"
android:layout_weight="1"
android:textIsSelectable="true"
android:textSize="25sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/row_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="2"
android:layout_below="@id/row_3" >
<TextView
android:id="@+id/company_5"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_gravity="bottom|left"
android:layout_marginLeft="0dp"
android:layout_weight="1"
android:textIsSelectable="true"
android:textSize="25sp" />
<TextView
android:id="@+id/next_5"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_gravity="bottom|right"
android:layout_marginRight="0dp"
android:layout_weight="1"
android:textIsSelectable="true"
android:textSize="25sp" />
</LinearLayout>
</RelativeLayout>
答案 0 :(得分:3)
如果Textview保持不变,那么你可以这样做..
int[] companyIds = { R.id.company_id_1,
R.id.company_id_2, R.id.company_id_3,...};
并在代码中执行此操作
TextView company_select = (TextView)findViewById(companyIds[i]);
答案 1 :(得分:1)
你真的对这条线确定吗,
TextView company_select = company_ + i;
?? 该行抛出错误(异常)。
这条线的意义是什么,你想要实现什么?
只需将textview的id存储在int数组中..
int[] textviewIds = { R.id.company_id_1,
R.id.company_id_2, R.id.company_id_3,R.id.company_id_4,R.id.company_id_5...};
并在for循环中使用此数组,
TextView company_select = (TextView)findViewById(textviewIds[i]);
答案 2 :(得分:1)
你的方式是不可能的。
你可以使用反射,但那将是矫枉过正。 请尝试以下
List<Integer> companies= Arrays.asList(R.id.company_1,R.id.company_2,R.id.company_3,R.id.company_4,R.id.company_5);
得到它:
companies.get(i%5);
答案 3 :(得分:0)
您可以使用Integer.toString()
然后通话将是TextView company_select = company_ + Integer.toString(i);