Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android listview header

i have an app that is showing data in listview ,but i want first row to be inflated by diferent layout , and i did that but since there is gona be a big number of listitems , i want to optimize listview and there is issue. i cant optimize listview when iam filling listview on that way , so how can i put content that should go in fist row inside listview header witch is inflated by some layout ,here is the code of Adapter

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.main);

    LinearLayout content = (LinearLayout) findViewById(R.id.content);
    LinearLayout refLayout = (LinearLayout) findViewById(R.id.refLayout);

    refLayout.setVisibility(View.GONE);

    mBtnNaslovnica = (Button) findViewById(R.id.mBtnNaslovnica);
    mBtnNaslovnica.setSelected(true);
    TextView txtView=(TextView) findViewById(R.id.scroller);
txtView.setSelected(true);
    loadPage();
    ImageButton mBtnRefresh = (ImageButton) findViewById(R.id.btnRefresh);
    mBtnRefresh.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            new LoadingTask().execute(URL);
        }
    });

}

public void loadPage(){

    ArrayList<HashMap<String, String>> homeList = new ArrayList<HashMap<String, String>>();



        JSONObject jsonobj;
        try {
            jsonobj = new JSONObject(getIntent().getStringExtra("json"));
            JSONObject datajson = jsonobj.getJSONObject("data");
            JSONArray news = datajson.getJSONArray(TAG_NEWS);
            JSONArray actual = datajson.getJSONArray("actual");
            for(int i = 0; i < news.length(); i++){
                JSONObject c = news.getJSONObject(i);

                // Storing each json item in variable
                String id = c.getString(TAG_ID);
                String title = c.getString(TAG_TITLE);
                String story = c.getString(TAG_STORY);
                String shorten = c.getString(TAG_SH_STORY);
                String author = c.getString(TAG_AUTHOR);
                String datetime = c.getString(TAG_DATETIME);
                String img = c.getString(TAG_IMG);
                String big_img = c.getString(TAG_BIG_IMG);



                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();

                // adding each child node to HashMap key => value
                map.put(TAG_ID, id);
                map.put(TAG_TITLE, title);
                map.put(TAG_STORY, story);
                map.put(TAG_IMG, img);
                map.put(TAG_BIG_IMG, big_img);
                map.put(TAG_DATETIME, datetime);
                map.put(TAG_AUTHOR, author);

                // adding HashList to ArrayList
                homeList.add(map);}
            for(int i = 0; i < actual.length(); i++){
                JSONObject c = actual.getJSONObject(i);

                // Storing each json item in variable
                String id = c.getString(TAG_ACT_TIME);
                String body = c.getString(TAG_ACT_BODY);
                String anews = " | "+ id+ " " + body;
                String cur_anews = ((TextView) findViewById(R.id.scroller)).getText().toString();
                String complete = anews + cur_anews;
                TextView anewstv = (TextView) findViewById(R.id.scroller);
                anewstv.setText(complete);

                }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }






    list=(ListView)findViewById(R.id.list);

    // Getting adapter by passing xml data ArrayList
    adapter=new LazyAdapter(this, homeList);        
    list.setAdapter(adapter);


    // Click event for single list row
    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
            String cur_title = ((TextView) view.findViewById(R.id.title)).getText().toString();
            String cur_story = ((TextView) view.findViewById(R.id.einfo2)).getText().toString();
            String cur_author = ((TextView) view.findViewById(R.id.einfo1)).getText().toString();
            String cur_datetime  = ((TextView) view.findViewById(R.id.tVdatetime)).getText().toString();
            String cur_actual  = ((TextView) findViewById(R.id.scroller)).getText().toString();
            ImageView cur_img = (ImageView) view.findViewById(R.id.list_image);
            String cur_img_url = (String) cur_img.getTag();

            Intent i = new Intent("com.example.androidhive.CURENTNEWS");
            i.putExtra("CUR_TITLE", cur_title);
            i.putExtra("CUR_STORY", cur_story);
            i.putExtra("CUR_AUTHOR", cur_author);
            i.putExtra("CUR_DATETIME", cur_datetime);
            i.putExtra("CUR_IMG_URL", cur_img_url);
            i.putExtra("CUR_ACTUAL", cur_actual);
            startActivity(i);
        }
    });     
}   

public void reloadPage(String jsonstring){
    ArrayList<HashMap<String, String>> homeList = new ArrayList<HashMap<String, String>>();



    JSONObject jsonobj;
    try {
        jsonobj = new JSONObject(jsonstring);
        JSONObject datajson = jsonobj.getJSONObject("data");
        JSONArray news = datajson.getJSONArray(TAG_NEWS);
        JSONArray actual = datajson.getJSONArray("actual");
        for(int i = 0; i < news.length(); i++){
            JSONObject c = news.getJSONObject(i);

            // Storing each json item in variable
            String id = c.getString(TAG_ID);
            String title = c.getString(TAG_TITLE);
            String story = c.getString(TAG_STORY);
            String shorten = c.getString(TAG_SH_STORY);
            String author = c.getString(TAG_AUTHOR);
            String datetime = c.getString(TAG_DATETIME);
            String img = c.getString(TAG_IMG);
            String big_img = c.getString(TAG_BIG_IMG);


            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();

            // adding each child node to HashMap key => value
            map.put(TAG_ID, id);
            map.put(TAG_TITLE, title);
            map.put(TAG_STORY, story);
            map.put(TAG_IMG, img);
            map.put(TAG_BIG_IMG, big_img);
            map.put(TAG_DATETIME, datetime);
            map.put(TAG_AUTHOR, author);

            // adding HashList to ArrayList
            homeList.add(map);}
        for(int i = 0; i < actual.length(); i++){
            JSONObject c = actual.getJSONObject(i);

            // Storing each json item in variable
            String id = c.getString(TAG_ACT_TIME);
            String body = c.getString(TAG_ACT_BODY);
            String anews = " | "+ id+ " " + body;
            String cur_anews = ((TextView) findViewById(R.id.scroller)).getText().toString();
            String complete = anews + cur_anews;
            TextView anewstv = (TextView) findViewById(R.id.scroller);
            anewstv.setText(complete);

            }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }






list=(ListView)findViewById(R.id.list);

// Getting adapter by passing xml data ArrayList
adapter=new LazyAdapter(this, homeList);        
list.setAdapter(adapter);


// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
        String cur_title = ((TextView) view.findViewById(R.id.title)).getText().toString();
        String cur_story = ((TextView) view.findViewById(R.id.einfo2)).getText().toString();
        String cur_author = ((TextView) view.findViewById(R.id.einfo1)).getText().toString();
        String cur_datetime  = ((TextView) view.findViewById(R.id.tVdatetime)).getText().toString();
        String cur_actual  = ((TextView) findViewById(R.id.scroller)).getText().toString();
        ImageView cur_img = (ImageView) view.findViewById(R.id.list_image);
        String cur_img_url = (String) cur_img.getTag();

        Intent i = new Intent("com.example.androidhive.CURENTNEWS");
        i.putExtra("CUR_TITLE", cur_title);
        i.putExtra("CUR_STORY", cur_story);
        i.putExtra("CUR_AUTHOR", cur_author);
        i.putExtra("CUR_DATETIME", cur_datetime);
        i.putExtra("CUR_IMG_URL", cur_img_url);
        i.putExtra("CUR_ACTUAL", cur_actual);
        startActivity(i);
    }
});
}

public void startNewActivity(){

}
public class LoadingTask extends AsyncTask<String, Object, Object>{
    XMLParser parser = new XMLParser();
    JSONParser jParser = new JSONParser();
    LinearLayout content = (LinearLayout) findViewById(R.id.content);
    LinearLayout refLayout = (LinearLayout) findViewById(R.id.refLayout);

    protected void onPreExecute(){
        content.setClickable(false);
        refLayout.setVisibility(View.VISIBLE);
    }

    @Override
    protected Object doInBackground(String... params) {
        // TODO Auto-generated method stub


        String URL = params[0];
        JSONObject json = jParser.getJSONFromUrl(URL);
        //String xml = parser.getXmlFromUrl(URL); // getting XML from URL
         // getting DOM element
        return json;
    }

    protected void onPostExecute(Object result){
        String json;
        json = result.toString();
        reloadPage(json);
        refLayout.setVisibility(View.GONE);
    }


}



}
like image 769
Silvio Marijic Avatar asked Sep 02 '12 09:09

Silvio Marijic


People also ask

How to set header in listview Android?

This example demonstrates How to add header item for Listview in Android. Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml.


1 Answers

If I got your point - you can go with 2 approaches:

  1. Add headerView to the list. That is just easy as inflate your View and pass it to addHeaderView(View) of your List. Note: you must add this view before setting the adapter, or it will throw the exception.

  2. However, as your 'header' is representing the same data as all other items, but has different layout - I suggest not to use Header here. Instead, try to implement getItemViewType() in your adapter. http://developer.android.com/reference/android/widget/BaseAdapter.html#getItemViewType(int) If you'll do - you'll have ability to check which type of layout to return in getView() method. And Android will take care of optimizing and reusing your inflated Views for you, so you can be sure that convertView, passed to your getView will be of the right type and layout.

Please let me know if I should explain with more details.

like image 93
AlexN Avatar answered Nov 07 '22 08:11

AlexN