Android如何在一个活动中显示两个列表视图?

时间:2013-10-23 06:17:47

标签: android json

嗨,我需要在同一个布局上显示两个列表视图,但我在如何解决问题方面面临一些挑战。如果有人可以帮助我,我真的很感激。这是我的代码

Activity_Main

<TextView
    android:id="@+id/test"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Latest Events"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView 
    android:id="@+id/downloading"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="Downloading ... "
    android:layout_gravity="center_vertical|center_horizontal"
    android:gravity="center_vertical|center_horizontal"/>    


<ListView
    android:id="@+id/list_view"
    android:layout_width="fill_parent"
    android:layout_height="270dp" >
</ListView>

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Recommendation"
    android:textAppearance="?android:attr/textAppearanceMedium" />

    <ListView
    android:id="@+id/list_view2"
    android:layout_width="fill_parent"
    android:layout_height="100dp" >
</ListView>

MainActivity

在这个主要活动中,我需要添加另一个带有不同网址的列表视图来获取不同的数据。 所以基本上,listview是使用下面的代码获取数据, 我声明了listview2,即获取其他数据。谁知道我怎么能在里面实现这个方法?我尝试声明ListView2,但是当我运行应用程序时。程序自动上传listview 2上的数据,将第一个listview留空。

package com.farid.eventauto;

  public class MainActivity extends Activity {

private static final String TAG = "MainActivity";
// Button button;
static String json = "";
static JSONObject jObj = null;
TextView downloading;



ListView listView;
ListView listView2;

static final String[] MOBILE_OS = new String[] { "Android", "iOS",
        "WindowsMobile", "Blackberry" };
ArrayList<SingaPoreEvents> singaPoreEvents = new ArrayList<SingaPoreEvents>();
JSONArray events = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //ListView 1
    listView = (ListView) findViewById(R.id.list_view);

    //ListView 2
     listView2 = (ListView) findViewById(R.id.list_view2);


    downloading = (TextView) findViewById(R.id.downloading);
    // button = (Button) findViewById(R.id.get);
    /*
     * button.setOnClickListener(new OnClickListener() {
     * 
     * @Override public void onClick(View arg0) {} });
     */
    buttonClick();

}

private void buttonClick() {

    new Thread(new Runnable() {
        @Override
        public void run() {
            String imgUrl = "";
            String imgUrlSmall = "";
            String imgUrlMedium = "";
            String imgUrlThumb = "";
            Drawable eventDrawable;
            jObj = sendReq();
            events = jObj.names();
            Log.e(TAG, "size of events array -->" + events.length());
            /*
             * for (int i = 0; i < events.length(); i++) { try { Log.e(TAG,
             * "-->"+events.getString(i)); } catch (JSONException e) { //
             * TODO Auto-generated catch block e.printStackTrace(); } }
             */
            try {
                /*
                 * Log.e(TAG, "events arrray lenght-->" +
                 * jObj.getJSONObject("events").length());
                 */
                JSONArray eventsArray = jObj.getJSONObject("events")
                        .getJSONArray("event");
                for (int i = 0; i < eventsArray.length(); i++) {
                    JSONObject c = eventsArray.getJSONObject(i);
                    /*
                     * Log.e(TAG, "event title-->" + c.getString("title"));
                     */
                    if (!c.getString("image").equals("null")) {
                        JSONObject te = c.getJSONObject("image");
                        JSONArray ar = te.names();
                        for (int j = 0; j < ar.length(); j++) {
                            Log.e(TAG, "++++++>" + ar.getString(j));
                        }
                        if (!c.getString("image").equals("null")) {
                            imgUrl = c.getJSONObject("image").getString(
                                    "url");
                            if (!c.getJSONObject("image")
                                    .getString("small").equals("null")) {
                                imgUrlSmall = c.getJSONObject("image")
                                        .getJSONObject("small")
                                        .getString("url");
                            } else {
                                imgUrlSmall = "";
                            }
                            if (!c.getJSONObject("image")
                                    .getString("medium").equals("null")) {
                                imgUrlMedium = c.getJSONObject("image")
                                        .getJSONObject("medium")
                                        .getString("url");
                            } else {
                                imgUrlMedium = "";
                            }
                            if (!c.getJSONObject("image")
                                    .getString("thumb").equals("null")) {
                                imgUrlThumb = c.getJSONObject("image")
                                        .getJSONObject("thumb")
                                        .getString("url");
                            } else {
                                imgUrlThumb = "";
                            }

                            // eventDrawable =
                            // drawableFromUrl(imgUrl);
                            eventDrawable = null;
                        } else {
                            imgUrl = "";
                            imgUrlMedium = "";
                            imgUrlThumb = "";
                            eventDrawable = null;
                        }
                        singaPoreEvents.add(new SingaPoreEvents(c
                                .getString("title"), imgUrl, c
                                .getString("description"), imgUrlMedium,
                                imgUrlMedium, imgUrlThumb));
                    }
                }
                handler.sendEmptyMessage(UPDATE_LIST_VIEW);
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }).start();

}

private JSONObject sendReq() {
    JSONObject jObj = null;
    try {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet getRequest = new HttpGet(
                "http://api.eventful.com/json/events/search?app_key=42t54cX7RbrDFczc&location=singapore&page_size=50");
        getRequest.addHeader("accept", "application/json");

        HttpResponse response = httpClient.execute(getRequest);

        if (response.getStatusLine().getStatusCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : "
                    + response.getStatusLine().getStatusCode());
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(
                (response.getEntity().getContent())));
        StringBuilder sb = new StringBuilder();
        String line = null;
        Log.e(TAG, "Output from Server .... \n");
        while ((line = br.readLine()) != null) {
            sb.append(line + "\n");
        }
        json = sb.toString();
        // Log.e(TAG, "------->" + json);
        httpClient.getConnectionManager().shutdown();

        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return jObj;
}

private static final int UPDATE_LIST_VIEW = 1;
Handler handler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        if (msg.what == UPDATE_LIST_VIEW) {
            Log.e(TAG,
                    "lenght of singapore events-->"
                            + singaPoreEvents.size());
            if (singaPoreEvents.size() > 0) {
                downloading.setVisibility(View.GONE);
                listView.setAdapter(new LazyAdapter(MainActivity.this,
                        singaPoreEvents));
                listView.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3) {
                        startActivity(new Intent(getApplicationContext(),
                                DetailActivity.class)
                                .putExtra(
                                        DetailActivity.event_title,
                                        singaPoreEvents.get(arg2)
                                                .getTitle())
                                .putExtra(
                                        DetailActivity.event_description,
                                        singaPoreEvents.get(arg2)
                                                .getDescritption())
                                .putExtra(
                                        DetailActivity.event_img_url,
                                        singaPoreEvents.get(arg2)
                                                .getEventDrawableMedium()));
                    }
                });
            }else{
                downloading.setVisibility(View.VISIBLE);

            }
        }
    };
};

1 个答案:

答案 0 :(得分:0)

您应该为ListView控件创建适配器。像here

一样