studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android android-listview

para - manual de programacion android pdf



Los elementos de vista de lista cambian de posición al desplazarse por Android. (4)

En su clase de adaptador, anule estos dos métodos

@Override public int getViewTypeCount() { return getCount(); } @Override public int getItemViewType(int position) { return position; }

En mi aplicación usé un adaptador de vista de lista personalizado. En el elemento de vista de lista agregué otro diseño. porque en mi servicio un pedido tiene cualquier cantidad de artículos de pedido. Para mostrar los artículos de pedido, agregué el diseño del artículo de pedido a continuación al elemento de vista de lista personalizada. Está funcionando bien. pero cuando se desplaza la vista de lista, los datos cambian.

clase de adaptador:

public class PreviousDataAdapter extends BaseAdapter { ArrayList<PreviousOrderData> bpData; private ArrayList<PreviousOrderData> arraylist; ArrayList<OrderItemData> opData; private ArrayList<OrderItemData> arraylist1; private Activity activity; private LayoutInflater inflater; String g_orderid; DatabaseHandler db; SharedPreferences m_sharedPreference; SharedPreferences.Editor m_editor; ArrayList<String> circless = new ArrayList<String>(); public PreviousDataAdapter(Activity activity, ArrayList<PreviousOrderData> bpData,ArrayList<OrderItemData> opdata) { // TODO Auto-generated constructor stub this.activity = activity; this.bpData = bpData; this.opData=opdata;//k? // this.opData=bpData.get()//opdata; inflater = LayoutInflater.from(activity); db = new DatabaseHandler(activity); } @Override public int getCount() { // TODO Auto-generated method stub return bpData.size(); } @Override public Object getItem(int location) { // TODO Auto-generated method stub return bpData.get(location); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } private int lastPosition = -1; @Override public View getView(final int position, View convertView, ViewGroup parent) { Typeface custom_regular = Typeface.createFromAsset(activity.getAssets(), "fonts/OpenSans-Regular.ttf"); m_sharedPreference = activity.getSharedPreferences("save_details", activity.MODE_PRIVATE); m_editor = m_sharedPreference.edit(); //String[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; //final View view; final ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.previousorders_listitem, null); viewHolder.date = (TextView) convertView.findViewById(R.id.date); viewHolder.orderid = (TextView) convertView.findViewById(R.id.orderid); viewHolder.amount = (TextView) convertView.findViewById(R.id.amount); viewHolder.status = (TextView) convertView.findViewById(R.id.status); viewHolder.ordersinfo=(LinearLayout)convertView.findViewById(R.id.previousorders); viewHolder.date .setTypeface(custom_regular); viewHolder.orderid.setTypeface(custom_regular); viewHolder.amount.setTypeface(custom_regular); viewHolder.status.setTypeface(custom_regular); viewHolder.ll_individuvalitem = (LinearLayout) convertView.findViewById(R.id.ll_individuvalitem); //convertView = view; convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.date.setText(bpData.get(position).getDate()); viewHolder.orderid.setText(bpData.get(position).getOrdername()); viewHolder. amount.setText("Rs."+bpData.get(position).getAmount()); viewHolder. status.setText(bpData.get(position).getStatus()); viewHolder.ordersinfo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { g_orderid =bpData.get(position).getOrderid(); Log.v("TAG_ORDERIDADAPTER",""+g_orderid); new GetReorder().execute(WebUrl.RechargeServiceURL+"APP_Reorder"); } }); //Log.d("size:",opData.size()+""); if( opData!= null && opData.size() >0){opData.clear();} opData = bpData.get(position).getOrderItemDataList();// if(opData.size()>0){ viewHolder.ll_individuvalitem.removeAllViews(); for (int i = 0; i < opData.size(); i++){ // Log.v("TAG Number loop",""+opData.get(i).getNumber()); View itemview = inflater.inflate(R.layout.previousorders_list_single_items, null); TextView Number = (TextView)itemview.findViewById(R.id.Number); TextView RechargeAmount = (TextView)itemview.findViewById(R.id.RechargeAmount); TextView Rechargestatus = (TextView)itemview.findViewById(R.id.Rechargestatus); Number.setTypeface(custom_regular); RechargeAmount.setTypeface(custom_regular); Rechargestatus.setTypeface(custom_regular); Number.setText(opData.get(i).getNumber()); RechargeAmount.setText("Rs."+opData.get(i).getRechargeAmount()); Rechargestatus.setText(opData.get(i).getRechargestatus()); viewHolder.ll_individuvalitem.addView(itemview); } } return convertView; } class ViewHolder { TextView date, tx_month, orderid, amount,status; LinearLayout ll_individuvalitem,ordersinfo; } private class GetReorder extends AsyncTask<String, Void, JSONObject> { /*String mJourneyDate; public GetData(String pJourneyDate) { this.mJourneyDate = pJourneyDate; }*/ @Override protected void onPreExecute() { super.onPreExecute(); // pDialog = ProgressDialog.show(getActivity(), "", ""); } @Override protected JSONObject doInBackground(String... params) { String response; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(params[0]); List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(4); nameValuePair.add(new BasicNameValuePair("OrderID", g_orderid)); nameValuePair.add(new BasicNameValuePair("DeviceID", m_sharedPreference.getString("deviceId",""))); nameValuePair.add(new BasicNameValuePair("PlatformID", "3")); nameValuePair.add(new BasicNameValuePair("UserUniqueID", m_sharedPreference.getString("useruid",""))); httppost.setEntity(new UrlEncodedFormEntity(nameValuePair)); HttpResponse responce = httpclient.execute(httppost); HttpEntity httpEntity = responce.getEntity(); response = EntityUtils.toString(httpEntity); Log.d("response is", response); return new JSONObject(response); } catch (Exception ex) { ex.printStackTrace(); } return null; } @Override protected void onPostExecute(JSONObject result) { String Status; super.onPostExecute(result); // Log.v("TAG_RESULT",""+result); if (result != null) { try { Intent intent= new Intent(activity, Payment_Actiivity.class); intent.putExtra("jsonfrompayment",result.toString()); Log.v("TAG_JSONPAY",""+result.toString()); activity.startActivity(intent); } catch (Exception e) { e.printStackTrace(); } } else { Toast.makeText(activity, "something went wrong", Toast.LENGTH_LONG).show(); } } } }


Tuve el mismo problema, luego el enlace a continuación resolvió mi problema;

https://.com/a/36738935/3341089

Básicamente, debe especificar sus tipos de elementos y luego reconfigurar su adaptador a través de los métodos de anulación getItemViewType(int position) y getViewTypeCount() .

Si observa el enlace de arriba, lo obtendrá.


está utilizando dos matrices: "bpData" y "opData" y solo se restablece si se encuentra en condiciones específicas con "opData".

Este es un mal diseño. Necesita una matriz: si "opData" depende de "bpData", conviértalo en una variable de "bpData".

O bien, escriba algo para sincronizar los dos. De lo contrario, no sabe cómo funcionará la pantalla.


@Override public int getViewTypeCount() { return getCount(); } @Override public int getItemViewType(int position) { return position; }

Funciona bien para mi