2016-09-20 95 views
0

我有一個ListAdapter,其中getview返回的位置重複而不是增加, 如果列表大小爲4 getview()應該去從0到3,但它進入0 1 0 1,這裏是代碼:在getView()中的位置在兩個位置之後重複並跳過最後兩個位置

public class PractitionersAdapter extends BaseAdapter { 


public static class ViewHolder { 
    TextView header; 
    public TextView Pname; 
    public TextView otherDetails; 
    ImageView image; 
    Button switchPractitioner; 
    LinearLayout detailsLayout; 
} 

private ArrayList<PractitionersData> current = new ArrayList<>(); 
private ArrayList<PractitionersData> previous = new ArrayList<>(); 
private ArrayList<PractitionersData> mergedList = new ArrayList<>(); 

private LayoutInflater mInflater; 


public PractitionersAdapter(Context context) { 
    mInflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    current.add(0, new PractitionersData("Current Practitioners")); 
    previous.add(0, new PractitionersData("Previous Practitioners")); 
} 

public void addItemToCurrent(final PractitionersData item) { 
    current.add(item); 
} 

public void addItemToPrevious(final PractitionersData item) { 
    previous.add(item); 
} 


@Override 
public int getCount() { 
    return mergedList.size(); 
} 

@Override 
public PractitionersData getItem(int position) { 
    return mergedList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder v; 
    Log.d("position getview", String.valueOf(position)); 

    if (convertView == null) { 
     v = new ViewHolder(); 
     convertView = mInflater.inflate(R.layout.practitioners_list_item, null); 
     v.header = (TextView) convertView.findViewById(R.id.header_type); 
     v.Pname = (TextView) convertView.findViewById(R.id.practitionername); 
     v.otherDetails = (TextView) convertView.findViewById(R.id.practitionerdetails); 
     v.image = (ImageView) convertView.findViewById(R.id.practitioner_image); 
     v.switchPractitioner = (Button) convertView.findViewById(R.id.switch_practitioner); 
     v.detailsLayout = (LinearLayout) convertView.findViewById(R.id.details_layout); 
     convertView.setTag(v); 
    } else { 
     v = (ViewHolder) convertView.getTag(); 
    } 


    if (position != current.size() + 1 && position != 0) { 
     v.detailsLayout.setVisibility(View.VISIBLE); 
     v.Pname.setText(mergedList.get(position).name); 
     v.otherDetails.setText(mergedList.get(position).details); 
     v.image.setBackgroundResource(R.drawable.userblue); 
     v.switchPractitioner.setBackgroundResource(R.drawable.switch_green); 
     v.header.setVisibility(View.GONE); 
    } else { 
     v.header.setVisibility(View.VISIBLE); 
     v.detailsLayout.setVisibility(View.GONE); 
     v.header.setText(mergedList.get(position).name); 
    } 


    return convertView; 
} 


public void addItemsToMerged() { 
    mergedList.addAll(current); 
    notifyDataSetChanged(); 
    mergedList.addAll(previous); 
    notifyDataSetChanged(); 
} 
} 

我打電話在活動中onResponse)凌空jsonObjectRequest的適配器(。

practionerList= (ListView) findViewById(R.id.practitioner_list); 
    String url = Config.practitioners; 
    Log.d("url", url); 

    RequestQueue requestQueue = VolleySingleton.getsInstance().getmRequestQueue(); 
    // CustomJORequest jsonObjectRequest = null; 
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url,null,new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      JSONArray activePractitioners; 
      JSONArray previousPractitioners; 
      try { 
       activePractitioners = response.getJSONArray("active_practitioners"); 
       for (int i = 0; i < activePractitioners.length(); i++) { 
        JSONObject obj = activePractitioners.getJSONObject(i); 
        String name = obj.getString("name"); 
        String pract_id= obj.getString("pract_id"); 

        Log.d("response", response.toString()); 

        PractitionersData practitionersData = new PractitionersData(true,"sid","other details of practiotioner 1"); 
        practitionersDatas.add(practitionersData); 
       } 
       previousPractitioners= response.getJSONArray("inactive_practitioners"); 
       for (int i = 0; i < previousPractitioners.length(); i++) { 
        JSONObject obj = previousPractitioners.getJSONObject(i); 
        String name = obj.getString("name"); 
        String pract_id= obj.getString("pract_id"); 

        Log.d("response", response.toString()); 

        PractitionersData practitionersData = new PractitionersData(false,"dis","other details of practiotioner 1"); 
        practitionersDatas.add(practitionersData); 
       } 

       mAdapter = new PractitionersAdapter(Practitioners.this); 
       for(int i=0;i<practitionersDatas.size();i++){ 
        if(practitionersDatas.get(i).isActive) { 
         mAdapter.addItemToCurrent(practitionersDatas.get(i)); 
        }else{ 
         mAdapter.addItemToPrevious(practitionersDatas.get(i)); 
        } 
       } 
       mAdapter.addItemsToMerged(); 
       practionerList.setAdapter(mAdapter); 


      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.d("response", error.toString()); 
     } 
    }); 
    requestQueue.add(jsonObjectRequest); 
+0

這是** BaseAdapter **的默認行爲。你面臨什麼問題? –

+0

問題是位置不是從0到3,因此我無法獲得位置2和3的列表項並將其設置爲您正在調用的文本瀏覽器 –

+0

** addItemsToMerged()**? –

回答

1

onResponse(JSONObject的響應),更換

mAdapter = new PractitionersAdapter(Practitioners.this); 
      for(int i=0;i<practitionersDatas.size();i++){ 
       if(practitionersDatas.get(i).isActive) { 
        mAdapter.addItemToCurrent(practitionersDatas.get(i)); 
       }else{ 
        mAdapter.addItemToPrevious(practitionersDatas.get(i)); 
       } 
      } 
      mAdapter.addItemsToMerged(); 
      practionerList.setAdapter(mAdapter); 

ArrayList<PractitionersData> current = new ArrayList<>(); 
ArrayList<PractitionersData> previous = new ArrayList<>(); 
mergedList = new ArrayList<>(); 


for(int i=0;i<practitionersDatas.size();i++){ 
if(practitionersDatas.get(i).isActive) { 
    current.add(practitionersDatas.get(i)); 
}else{ 
    previous.add(practitionersDatas.get(i)); 
} 
} 

current.add(0, new PractitionersData("Current Practitioners")); 
previous.add(0, new PractitionersData("Previous Practitioners")); 
mergedList.addAll(current); 
mergedList.addAll(previous); 

mAdapter = new PractitionersAdapter(Practitioners.this, mergedList); 
practionerList.setAdapter(mAdapter); 

和適配器類中刪除下面額外的代碼

private ArrayList<PractitionersData> current = new ArrayList<>(); 
private ArrayList<PractitionersData> previous = new ArrayList<>(); 

public void addItemToCurrent(final PractitionersData item) { 
current.add(item); 
} 

public void addItemToPrevious(final PractitionersData item) { 
previous.add(item); 
} 

public void addItemsToMerged() { 
mergedList.addAll(current); 
notifyDataSetChanged(); 
mergedList.addAll(previous); 
notifyDataSetChanged(); 
} 

並將適配器構造器更改爲

public PractitionersAdapter(Context context, ArrayList<PractitionersData> mergedList) { 
mInflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
this.mergedList = mergedList; 
} 

希望它能幫助您。

+0

謝謝你的答案讓我試試看。 –