-1

Stackoverflowをサーフィンしながらこのコードを見ていました

コード::

public class MainActivity extends Activity {
    // Declare Variables
    JSONObject jsonobject;
    JSONArray jsonarray;
    ListView listview;
    ListViewAdapter adapter;
    ProgressDialog mProgressDialog;
    ArrayList<HashMap<String, String>> arraylist;
    static String NAME = "rank";
    static String TYPE = "country";
    static String DISTANCE = "distance";
    static String RATING = "rating";
    static String FLAG = "flag";
    static String PRICE= "price";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from listview_main.xml
        setContentView(R.layout.listview_main);


        // Locate the listview in listview_main.xml
        listview = (ListView) findViewById(R.id.listview);

        // Execute DownloadJSON AsyncTask
        new DownloadJSON().execute();
    }

    // DownloadJSON AsyncTask
    private class DownloadJSON extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Create a progressdialog
            mProgressDialog = new ProgressDialog(MainActivity.this);
            // Set progressdialog title
            //mProgressDialog.setTitle("Fetching the information");
            // Set progressdialog message
            mProgressDialog.setMessage("Loading...");
            mProgressDialog.setIndeterminate(false);
            // Show progressdialog
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            // Create an array
            arraylist = new ArrayList<HashMap<String, String>>();
            // Retrieve JSON Objects from the given URL address
            jsonobject = JSONfunctions.getJSONfromURL("--------------URL----------");

            try {
                // Locate the array name in JSON
                jsonarray = jsonobject.getJSONArray("ARRAY");

                for (int i = 0; i < jsonarray.length(); i++) {
                    HashMap<String, String> map = new HashMap<String, String>();
                    jsonobject = jsonarray.getJSONObject(i);
                    // Retrive JSON Objects
                    map.put(MainActivity.NAME, jsonobject.getString("collegeNAME"));
                    map.put(MainActivity.TYPE, jsonobject.getString("collegeTYPE"));
                    map.put(MainActivity.FLAG, jsonobject.getString("collegeIMAGE"));
                    map.put(MainActivity.DISTANCE, jsonobject.getString("collegeDISTANCE"));
                    map.put(MainActivity.RATING, jsonobject.getString("collegeRATING"));
                    map.put(MainActivity.PRICE, jsonobject.getString("collegePrice"));

                    // Set the JSON Objects into the array
                    arraylist.add(map);
                }
            } catch (JSONException e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void args) {
            // Pass the results into ListViewAdapter.java
            adapter = new ListViewAdapter(MainActivity.this, arraylist);
            // Set the adapter to the ListView
            listview.setAdapter(adapter);
            // Close the progressdialog
            mProgressDialog.dismiss();
        }
    }
}

  • 私の質問は、なぜアンドロイドでコレクションを使用するのですか?
  • 用途は何ですか?
  • 上記のコードでハッシュマップが ArrayList に追加されるのはなぜですか?
  • コレクションなしで Android に直接ビューを設定することはできませんか?

. ~ 私は初心者なので、私の質問に簡単に答えてください

4

2 に答える 2

2

コレクションに関する最初の 2 つの質問にどう答えたらよいかわかりませんが、試してみます。

1, 2) コレクションは、情報のグループをまとめて保持し、1 つの変数からアクセスできるようにするのに適しています。また、リスト (またはコレクション) でもあるため、ListView アダプターなどに最適です。

配列がない場合は、次のことを考慮してください

String var1 = "hi1";
String var2 = "hi2";
String var3 = "hi3";
String var4 = "hi4";
String var5 = "hi5";
String var6 = "hi6";
String var7 = "hi7";
String var8 = "hi8";
String var9 = "hi9";

// do something with the variables    
Toast.makeText(this, var1, Toast.LENGTH_SHORT).show();
Toast.makeText(this, var2, Toast.LENGTH_SHORT).show();
Toast.makeText(this, var3, Toast.LENGTH_SHORT).show();
Toast.makeText(this, var4, Toast.LENGTH_SHORT).show();
Toast.makeText(this, var5, Toast.LENGTH_SHORT).show();
Toast.makeText(this, var6, Toast.LENGTH_SHORT).show();
Toast.makeText(this, var7, Toast.LENGTH_SHORT).show();
Toast.makeText(this, var8, Toast.LENGTH_SHORT).show();
Toast.makeText(this, var9, Toast.LENGTH_SHORT).show();

配列がある場合は、これを考慮してください。

ArrayList<String> vars = new ArrayList<String(9);
for (int i = 1; i <= 9; i++)
{
    vars.add("hi" + i);
    Toast.makeText(this, vars.get(i), Toast.LENGTH_SHORT).show();
}

はるかに簡単に操作できます。

3) 作成者が個別の名前と値のペアのコレクションを保持したかったため、Hashmap が配列に追加されます。 Hashmap に同じ値を持つ複数のキーを持つことはできないため、それが必要な場合は、新しい Hashmap を作成する必要があります。それらを配列に追加することは、配列をきれいに保つことであり、作成者は配列を ListView アダプターに渡して、Android の組み込みメカニズムを使用してユーザーに値を表示できるようにしました。

基本的に、作成者はこの階層を作成しました:

item1
    name
    type
    flag
    distance
    rating
    price
item2
    name
    type
    flag
    distance
    rating
    price
item3
    name
    type
    flag
    distance
    rating
    price
...etc...

そのため、ListView が配列を反復処理すると、ハッシュマップ値の個別のコレクションが新しいリストビュー項目で表示できるようになります。

4) 値を直接設定することもできますが、ListViews でアダプターを使用すると、面倒な作業が大幅に軽減されます。配列を作成し、その配列をリストビューに渡すと、リストが表示されます。そうしないと、ListView アイテムを作成し、各アイテムの表示テキストをすべて自分で設定することになります。同じ型の変数が多数ある場合にコレクションが役立つ理由と同様に、そのコレクションを ListView に渡すと、コーディング、保守、およびトラブルシューティングがはるかに簡単になります。

これが役立つことを願っています!私たちは皆、一度は初心者です:)

于 2013-09-26T13:09:20.930 に答える
0

このコードは ListView にデータを入力します。これにはいくつかの方法があります。この場合、コーダーは SimpleAdapter http://developer.android.com/reference/android/widget/SimpleAdapter.htmlだと思います。

次のように考える人もいます:

// In This case the value os NAME is shown on android.R.id.text1 (TextView)
// and PRICE is shown on android.R.id.text2 (TextView)
String[] from = new String[]{MainActivity.NAME, MainActivity.PRICE}; // Map keys
int[] to = new int[]{android.R.id.text1, android.R.id.text2}; // List Layout item views

SimpleAdapter adapter = new SimpleAdapter(context, arraylist, android.R.layout.simple_list_item_2, String[] from, int[] to);
listview.setAdapter(adapter);
于 2013-09-26T13:10:02.377 に答える