2016-03-08 42 views
-2

我正在用户点击列表视图中的项目时,它会显示项目内部的公交时间。Listview显示重复的项目点击时

我不确定哪里出了问题。当它点击时,它会在列表视图中显示一个项目。但是当我滚动列表视图时,它将显示与前一项目相同的总线时间。我从stackoverflow读了几个解决方案,但是我没有解决这个问题。

我希望能得到一些建议来解决这个问题。

The text will appear when being clicked

Same text appear when scroll

public class Adapter extends ArrayAdapter 
{ 

    ArrayList<BusRoute>busList ; 
    private int resource; 
    private LayoutInflater inflater; 

    public Adapter(Context context, int resource, ArrayList objects) { 
     super(context, resource, objects); 
     busList=objects; 
     this.resource=resource; 
     inflater= (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 

    } 

    class ViewHolder { 
     TextView buscode; 
     TextView businfo; 
     TextView bookmark; 
     TextView firstBusTime; 

    } 




    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 


     if(convertView == null) 
     { 
      convertView=inflater.inflate(R.layout.bus_route_activity_listview,null); 
      holder = new ViewHolder(); 

      holder.buscode = (TextView) convertView.findViewById(R.id.buscode); 
      holder.businfo = (TextView) convertView.findViewById(R.id.businfo); 
      holder.bookmark = (TextView)convertView.findViewById(R.id.bookmark); 
      holder.firstBusTime = (TextView)convertView.findViewById(R.id.firstBusTime); 

     } 

     else 
     { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     final BusRoute map = busList.get(position); 
     holder.buscode.setText(map.getBusStopCode()); 
     holder.businfo.setText(map.getRoad() + "\n" + map.getDescription()); 

      //when user select on the particular item in the listview 
      convertView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       holder.firstBusTime.setText("Yo"); 

      } 

     }); 


     return convertView; 
    } 


} 

BusRoute类

public class BusRoute { 
private String BusStopCode; 
private String Road; 
private String Description; 

public String getBusStopCode() { 
    return BusStopCode; 
} 

public void setBusStopCode(String busStopCode) { 
    BusStopCode = busStopCode; 
} 


public String getRoad() { 
    return Road; 
} 

public void setRoad(String road) { 
    Road = road; 
} 

public String getDescription() { 
    return Description; 
} 

public void setDescription(String description) { 
    Description = description; 
} 

} 

适配器正被调用

public class BusRouteTask1 extends AsyncTask<String, String, ArrayList<BusRoute>> { 

    @Override 
    protected ArrayList<BusRoute> doInBackground(String... params) { 

    } 

    @Override 
    protected void onPostExecute(ArrayList<BusRoute> result) { 
     super.onPostExecute(result); 
     Adapter a = new Adapter(getApplicationContext(),  R.layout.activity_bus_route, result); 
     lv.setAdapter(a); 
+0

请发布您的BusRoute类。 –

+0

'最终BusRoute map = busList.get(position); holder.buscode.setText(map.getBusStopCode()); ......'在你的'if(convertView == null)'部分添加这个。 –

回答

0
如下

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.bus_route_activity_listview, null); 
      holder = new ViewHolder(); 
      holder.buscode = (TextView) convertView.findViewById(R.id.buscode); 
      holder.businfo = (TextView) convertView.findViewById(R.id.businfo); 
      holder.bookmark = (TextView) convertView.findViewById(R.id.bookmark); 
      holder.firstBusTime = (TextView) convertView.findViewById(R.id.firstBusTime); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     final BusRoute map = busList.get(position); 
     holder.buscode.setText(""+map.getBusStopCode()); 
     holder.businfo.setText(map.getRoad() + "\n" + map.getDescription()); 
     holder.firstBusTime.setText(map.getTime()); 
     //when user select on the particular item in the listview 
     convertView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
//    holder.firstBusTime.setText("Yo"); 
       map.setTime("Yo"); 
       notifyDataSetChanged(); 
      } 
     }); 
     return convertView; 
    } 

问题是你在呼唤textview.settext()onclick,而不是你应该更新模型项目内容价值3210

+0

感谢您的评论。但是,出现相同的输出结果。 – user1130507

0

改变你的getView()方法。 在你的情况下,你可以在你的BusRoute类中创建一个新的领域,例如String time;,您将创建getterssetters。然后像上面那样设置textview的值。

希望它能起作用。

相关问题