-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();
        }
    }
}

  • 我的问题是为什么我们在 android 中使用集合?
  • 有什么用?
  • 为什么在上面的代码中将哈希图添加到 ArrayList 中?
  • 我们不能在没有集合的情况下直接在android中设置视图吗(我在处理一组键值对时尝试过它不起作用)

. 〜我是新手,所以请轻松回答我的问题

4

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 遍历数组时,每个单独的 hashmap 值集合将可用于新的 listview 项进行显示。

4) 您可以直接设置值,但在 ListViews 中使用适配器可以减少繁琐的工作。您创建一个数组,将数组传递给列表视图,然后 bada-bing-bada-boom,这就是您的列表。否则,您将自己创建 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 回答