1

API レベル: 12 (Android 3.1)

アプリの背景:私の Android アプリを介して、会社を取得するために Web サーバーの MySQL データベースに要求を送信しています。それはすべてうまくいきます。もともと、返されたデータに を入力していましたListViewが、上司が好むビジュアルを取得するために、 6 をTextView均等に分散させました。(このアプリは、Samsung Galaxy Tab 10.1 の 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>
4

4 に答える 4

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]);
于 2012-07-03T17:03:56.253 に答える
1

この行について本当に確信がありますか?

TextView company_select = company_ + i; 

?? その行はエラー (例外) をスローします。

その行の意味は何ですか、何を達成したいですか?

テキストビューの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]);
于 2012-07-03T17:03:09.497 に答える
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);
于 2012-07-03T17:04:17.407 に答える
0

Integer.toString() を使用できます
。その後、呼び出しは次のようになりますTextView company_select = company_ + Integer.toString(i);

于 2012-07-03T17:03:39.457 に答える