列表视图项目滚动机器人时候改变位置? [英] List view items changes position when scrolling android?
本文介绍了列表视图项目滚动机器人时候改变位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的应用程序使用的自定义列表视图的适配器。在列表视图项我又增加了布局。因为在我服务的一个订单有任何数量订单的产品。对于显示订单项目我添加了订单项目布局下面的自定义列表视图item.it工作正常。但是,当滚动列表视图中的数据被更改。
适配器类:
公共类previousDataAdapter延伸BaseAdapter {
ArrayList的< previousOrderData> bpData;
私人的ArrayList< previousOrderData> ArrayList的;
ArrayList的< OrderItemData> opData;
私人的ArrayList< OrderItemData> arraylist1;
私人活动的活动;
私人LayoutInflater充气;
字符串g_orderid;
数据库处理器分贝;
共享preferences m_shared preference;
共享preferences.Editor m_editor;
ArrayList的<字符串> circless =新的ArrayList<字符串>();
公共previousDataAdapter(活动活动,ArrayList的< previousOrderData> bpData,ArrayList的< OrderItemData> opdata){
// TODO自动生成构造函数存根
this.activity =活动;
this.bpData = bpData;
this.opData = opdata; // K +
// this.opData = bpData.get()// opdata;
充气= LayoutInflater.from(活动);
DB =新的数据库处理器(活动);
}
@覆盖
公众诠释getCount将(){
// TODO自动生成方法存根
返回bpData.size();
}
@覆盖
公共对象的getItem(INT位置){
// TODO自动生成方法存根
返回bpData.get(位置);
}
@覆盖
众长getItemId(INT位置){
// TODO自动生成方法存根
返回0;
}
私人诠释lastPosition = -1;
@覆盖
公共查看getView(最终诠释的立场,观点convertView,ViewGroup中父){
字样custom_regular = Typeface.createFromAsset(activity.getAssets()
字体/ OpenSans-Regular.ttf);
m_shared preference = activity.getShared preferences(save_details,activity.MODE_PRIVATE);
m_editor = m_shared preference.edit();
//的String []月= {一月,二月,月,四月,五一,君,七月,八月,SEP,十月,十一月,十二月};
//最后查看视图;
最后ViewHolder viewHolder;
如果(convertView == NULL){
viewHolder =新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 =图。
convertView.setTag(viewHolder);
}其他 {
viewHolder =(ViewHolder)convertView.getTag();
}
viewHolder.date.setText(bpData.get(位置).getDate());
viewHolder.orderid.setText(bpData.get(位置).getOrdername());
viewHolder。 amount.setText(RS+ bpData.get(位置).getAmount());
viewHolder。 status.setText(bpData.get(位置).getStatus());
viewHolder.ordersinfo.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
g_orderid = bpData.get(位置).getOrderid();
Log.v(TAG_ORDERIDADAPTER,+ g_orderid);
新GetReorder()执行(WebUrl.RechargeServiceURL +APP_Reorder);
}
});
//Log.d("size:",opData.size()+);
如果(opData =空&安培;!&安培; opData.size()大于0){opData.clear();}
opData = bpData.get(位置).getOrderItemDataList(); //
如果(opData.size()大于0){
viewHolder.ll_individuvalitem.removeAllViews();
的for(int i = 0; I< opData.size();我++){
// Log.v(标签号循环,+ opData.get(I).getNumber());
查看ItemView控件= inflater.inflate(R.layout previousorders_list_single_items,NULL);
TextView的数=(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(ⅰ).getNumber());
RechargeAmount.setText(RS。+ opData.get(ⅰ).getRechargeAmount());
Rechargestatus.setText(opData.get(ⅰ).getRechargestatus());
viewHolder.ll_individuvalitem.addView(ItemView控件);
}
}
返回convertView;
}
类ViewHolder {
TextView的日期,tx_month,订单ID,数量,状态;
的LinearLayout ll_individuvalitem,ordersinfo;
}
私有类GetReorder扩展的AsyncTask<字符串,无效的JSONObject> {
/ *字符串mJourneyDate;
公众的GetData(字符串pJourneyDate){
this.mJourneyDate = pJourneyDate;
} * /
@覆盖
在preExecute保护无效(){
super.on preExecute();
// pDialog = ProgressDialog.show(getActivity(),,);
}
@覆盖
受保护的JSONObject doInBackground(字符串... PARAMS){
字符串响应;
尝试 {
HttpClient的HttpClient的=新DefaultHttpClient();
HttpPost httppost =新HttpPost(PARAMS [0]);
名单<的NameValuePair>的NameValuePair =新的ArrayList<的NameValuePair>(4);
nameValuePair.add(新BasicNameValuePair(订单ID,g_orderid));
nameValuePair.add(新BasicNameValuePair(的DeviceID,m_shared preference.getString(DEVICEID,)));
nameValuePair.add(新BasicNameValuePair(PlatformID,3));
nameValuePair.add(新BasicNameValuePair(UserUniqueID,m_shared preference.getString(useruid,)));
httppost.setEntity(新UrlEn codedFormEntity(的NameValuePair));
HTT presponse的反响= httpclient.execute(httppost);
HttpEntity httpEntity = responce.getEntity();
响应= EntityUtils.toString(httpEntity);
Log.d(反应,反应);
返回新的JSONObject(响应);
}赶上(例外前){
ex.printStackTrace();
}
返回null;
}
@覆盖
保护无效onPostExecute(JSONObject的结果){
字符串状态;
super.onPostExecute(结果);
// Log.v(TAG_RESULT,+导致);
如果(结果!= NULL){
尝试 {
意向意图=新的意图(活动,Payment_Actiivity.class);
intent.putExtra(jsonfrompayment,result.toString());
Log.v(TAG_JSONPAY,+ result.toString());
activity.startActivity(意向);
}赶上(例外五){
e.printStackTrace();
}
} 其他 {
Toast.makeText(活动,出事了,Toast.LENGTH_LONG).show();
}
}
}
}
解决方案
在适配器类中重写这两种方法
@覆盖
公众诠释getViewTypeCount(){
返回getCount将();
}
@覆盖
公众诠释getItemViewType(INT位置){
返回的位置;
}
In my application i used custom list view adapter. In the list view item i added another layout. because in my service one order have any number of order items. For showing the order items i added the order item layout below to custom list view item.it is working fine. but when scroll the list view the data is changed.
adapter class:
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();
}
}
}
}
解决方案
In your adapter class override these two methods
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
这篇关于列表视图项目滚动机器人时候改变位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文