Encabezado de listview de Android
Tengo una aplicación que está mostrando los datos en listview, pero quiero que la primera fila se infle por el diseño diferente, y lo hice, pero ya que hay gona ser un gran número de listitems, quiero optimizar listview y no hay problema. I no puede optimizar listview cuando iam llenado listview de esa manera, así que ¿cómo puedo poner contenido que debe ir en fila de puño dentro de listview cabecera bruja es inflado por algún diseño, aquí está el código de adaptador
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); } } }
- Checkbox 'Checked' en ListView se restaura después de desplazarse
- Android: la etiqueta de vista no es correcta en la vista: null (CursorAdapter y DataBinding)
- Animación de encabezados de un ListView dando ClassCastException
- Clasificación de listas de Google Android con el encabezado
- Android: Cómo ocultar un elemento ListView
- Bitmap Cache (SoftReference, Hard) en Lazy List no parece funcionar correctamente - Android
- Android listviews: vistas de encabezado y pie de página
- ListView animar elemento único
- Gaveta de navegación: agrega encabezados en listview
- Cómo actualizar la lista expandible cuando se agrega un elemento nuevo
- Utilizar ListView o GridView dinámicamente en función del diseño utilizado por dispositivo
- Android List View Array Índice Fuera de límites Excepción - ¿No hay pistas?
- MVVMCross Obtener SelectedItem de un MvxBindableListView
Si tengo su punto – usted puede ir con 2 enfoques:
-
Añadir headerView a la lista. Eso es simplemente fácil como inflar su vista y pasarla a
addHeaderView(View)
de su lista. Nota: debe agregar esta vista antes de configurar el adaptador, o lanzará la excepción. -
Sin embargo, como su "encabezado" representa los mismos datos que todos los demás elementos, pero tiene un diseño diferente, sugiero que no utilice Encabezado aquí. En su lugar, intente implementar
getItemViewType()
en su adaptador. http://developer.android.com/reference/android/widget/BaseAdapter.html#getItemViewType(int ) Si lo haces, tendrás la habilidad de verificar qué tipo de diseño devolver en el métodogetView()
. Y Android se encargará de optimizar y reutilizar sus vistas infladas para usted, por lo que puede estar seguro de queconvertView
, pasó a sugetView
será del tipo correcto y el diseño.
Por favor, hágamelo saber si debo explicar con más detalles.
Puedes hacerlo así:
... convertView.setOnClickListener(new OnItemClick(position)); ... public class OnItemClick implements OnClickListener { private final int index; public OnItemClick(int _index) { this.index = _index; } @Override public void onClick(View v) { //dosomething } }
- Cómo obtener el desplazamiento de una vista dentro de un ScrollView?
- Activar / desactivar una actividad mediante programación