2017-03-20 1 views
0

나는 button.Click을 클릭하여 값을 추가하고 값을 줄이는 등의 작업을 수행하려는 응용 프로그램을 만들었지 만 문제는 없습니다. 목록보기를 스크롤 할 때 그 값은 0이됩니다.스크롤 할 때 ListView Items (TextView)가 다시로드 될 때

그러나 증가 버튼을 클릭하거나 감소 버튼을 클릭하면 나에게 진정한 가치를 부여합니다.

: 즉, 2를 추가 할 때입니다. 클릭하여

내가 페이지를 스크롤 할 때 그것은 0이 될 것이고, 내가 addButton을 클릭하면이 것 저에게 3

를 제공하거나 내가 페이지를 스크롤 할 때 다음이 0이 될 것이고, 내가 마이너스 버튼이 클릭 할 때 나는 TextView displayInteger가 버려지고 그 값을 잊어 버렸을 때 1 스크롤 바깥쪽으로 스크롤 할 때 1

을 줄 것이다.

여기에 전체 코드 : -

listViewadapter.java ListView (또는 RecyclerView)와

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

    public View getView(final int position, View convertView, ViewGroup parent) { 

     TextView mname , pmethod2, pamount3, premark4; 
     final ImageView increase,decrease; 
     final Button add; 
     inflater = (LayoutInflater) cntx 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     LayoutInflater inflater = LayoutInflater.from(cntx); 

     convertView = inflater.inflate(R.layout.raw_order, parent, 
       false); 
     decrease = (ImageView) convertView.findViewById(R.id.decrease); 
     increase= (ImageView) convertView.findViewById(R.id.increase); 
     add= (Button) convertView.findViewById(R.id.add); 

     mname = (TextView) convertView.findViewById(R.id.mname); 
     mname.setText(" " + o_aproduct.get(position)); 


     final TextView displayInteger = (TextView) convertView.findViewById(R.id.integer_number); 
     //add.setText(" " +count); 

     increase.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int count = sia.get(position); 
       count= count + 1; 
       sia.put(position, count); 
       displayInteger.setText("" + count); 
       add.setText(" " +count); 

       if (count > 0) { decrease.setEnabled(true); } 
      } 
     }); 
     decrease.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int count = sia.get(position); 
       count= count- 1; 
       sia.put(position, count); 
       displayInteger.setText("" + count); 
       add.setText(" " +count); 
       if (count > 0) 
       {decrease.setEnabled(true);} 
       else if (count == 0){ 
        decrease.setEnabled(false); 
       } 
       else { decrease.setEnabled(false);} 
      } 
     }); 




     return convertView; 
    } 
+0

사용 recylerview 대신 목록보기 –

+0

의 난 당신이 같은 문제를 얻고있는 이유는 단지 .. 모든 – Andie

+0

먼저 당신이 재사용 개념 그게 전부를 사용하지 않는 ListView에 함께이 작업을 수행해야합니다. 먼저 재사용 할 수있는 모델을 만들고 오래된 카운트 값을 저장하십시오. 친절하게도이 비디오를 보시고 어댑터로 목록보기를 설명해 주시면 도움이 될 것입니다. ** [사용자 지정 어댑터가있는 ListView] (https://www.youtube.com/watch?v=UMSdD05NVYQ) ** –

답변

1

, 이벤트 리스너가보기를 변경해서는 안됩니다.

이벤트 리스너는 모델을 업데이트 한 다음 notifyDataSetChanged()을 호출해야합니다. notifyDataSetChanged()은 업데이트 된 모델에서 새로 고치도록 ListView에 지시합니다.

getView() 내에서보기 만 변경하십시오.

final TextView displayInteger = (TextView) convertView.findViewById(R.id.integer_number); 
    int count = sia.get(position); 
    displayInteger.setText("" + count); 
    decrease.setEnabled(count > 0); 

    increase.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      int count = sia.get(position); 
      count++; 
      sia.put(position, count); 
      notifyDataSetChanged(); 
     } 
    }); 
    decrease.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      int count = sia.get(position); 
      count--; 
      sia.put(position, count); 
      notifyDataSetChanged(); 
     } 
    }); 
+0

작품 감사합니다. – Andie

관련 문제