Android listview header

10,839

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.

Share:
10,839
Silvio Marijic
Author by

Silvio Marijic

Updated on June 04, 2022

Comments

  • Silvio Marijic
    Silvio Marijic almost 2 years

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