2012-12-11 2 views
1

Android 앱에 문제가 있습니다. 나는 textview 및 행 당 checktextview 포함하는 listview 만들려고합니다. 내가 레이아웃과 어댑터를 완료하고 모든 항목을 올바르게 표시하지만 내가 가지고있는 문제는 folowing입니다 : 나는 처음 7 개 항목 (초기 표시되는 항목)을 완벽하게 확인할 수 있지만 아래로 스크롤하여 folowing 항목 (하나는 보이지 않는 initialy) 난 널 포인터 예외를 얻을. 어떻게해야합니까?Android listview checkedtextview

어댑터 코드 :

private class myAdapter extends ArrayAdapter<Orders> { 

private ArrayList<Orders> items; 

public myAdapter(Context context, int resource, ArrayList<Orders> items) { 
    super(context, resource, items); 
    this.items = items; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = getLayoutInflater().inflate(R.layout.orderslist_row, 
       null); 
    } 

    Orders o = items.get(position); 

    CheckedTextView txtSymbol = (CheckedTextView) convertView 
      .findViewById(R.id.checkedTextView1); 
    txtSymbol.setText(o.getInstrumentID()); 

    CheckedTextView txtQuantity = (CheckedTextView) convertView 
      .findViewById(R.id.checkedTextView2); 
    Double qty = o.getQuantity(); 
    txtQuantity.setText(FormatNumber.Number(qty, 0)); 

    if (o.getStatus().toString().equals("Rejected")) 
     txtQuantity.setTextColor(Color.RED); 
    if (o.getStatus().toString().equals("Active")) 
     txtQuantity.setTextColor(Color.GREEN); 

    return convertView; 
} 

}

그리고 OnItemClickCode :

public void onItemClick(AdapterView<?> adapter, View view, int position, 
    long id) { 
View v = (View)lstOrders.getChildAt(position); 
CheckedTextView ctv = (CheckedTextView) v.findViewById(R.id.checkedTextView2); 
ctv.toggle(); 

} 볼 수 있습니다 인덱스 세트의 오프

답변

1

getChildAt(i) 작품. 스크롤하면 위치 3이 첫 번째 보이는 행이되고, 그 위치는 메소드의 위치 0이됩니다. 따라서 주어진 순간에 최대 7 개의 인덱스 만 허용됩니다. 목록 뷰 행이 화면에 표시 될 수있는 경우입니다. 이 방법을 계속 사용하는 경우 팁을 사용하여 원하는대로 비율을 조정할 수 있습니다. 첫 번째로 표시되는 행 인덱스가 무엇인지 알아 낸 다음 합계에서 뺍니다. listview에는 그러한 메소드가 있습니다.

+0

tty mango,하지만 어떻게 작동합니까? 전체 목록보기 (예 : for 루프)를 실행하고 목록의 모든 checkedtextviews에 액세스 할 수 있습니까? –

+0

어떤 조건에서이 작업을 수행 하시겠습니까? 그들 모두가 획일적으로 행동하기를 바랄까요? 나는'getChildAt'를 계속하는 것이 최선이라고 생각하지 않는다. 어댑터에 수정할 수있는 컬렉션이있는 것이 좋습니다. 콜렉션이 대응하는 위치에서 무엇을 읽는가에 근거 해,'getView '에서 원하는 것을위한 if 서술문을 사용하십시오. – mango

+0

예를 들어 삭제 된 항목으로 일부 작업을 수행하고 싶습니다. –