Android listview header
If I got your point - you can go with 2 approaches:
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.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 ingetView()
method. And Android will take care of optimizing and reusing your inflated Views for you, so you can be sure thatconvertView
, passed to yourgetView
will be of the right type and layout.
Please let me know if I should explain with more details.
Silvio Marijic
Updated on June 04, 2022Comments
-
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); } } }