내 Android 앱이 매우 이상하게 작동하지 않습니다.
@Override
public View getView(int position, View convert, ViewGroup parent)
{
View row = convert;
ImageView image = null;
TextView name = null, price = null;
if(row == null)
{
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(resource, parent, false);
image = (ImageView) row.findViewById(R.id.product_picture);
name = (TextView) row.findViewById(R.id.product_name);
price = (TextView) row.findViewById(R.id.product_price);
row.setTag(products.get(position));
}
Product product = products.get(position);
name.setText(product.getProduct_name());
image.setImageBitmap(product.getProduct_picture());
price.setText(String.valueOf(product.getProduct_price()));
return row;
}
이 목록보기 3 개 행을 갖는다 : 여기서 코드이다. 처음 2 개는 보이고 아무런 문제가 없습니다. 그러나 세 번째 행을 표시하려고 스크롤 할 때 "name.setText (...);"줄에 NULL 포인터 예외가 발생하여 프로그램이 중단됩니다.
에뮬레이터가 아닌 HTC 전화기에서 실행 중입니다.
아무도 이런 경험이 없습니까? 어떻게 디버그하고 수정합니까? 아니면 전화가 나빠지는 것을 나타내는 지표일까요?
감사합니다.
분명히 코드는 변경해야하지만 OP가 실수를 이해할 수 있도록 변경해야하는 이유/이유에 대해 자세히 설명 할 수 있습니까? – codeMagic
물론. Listview는 새로운 뷰를 생성하는 대신 스크롤 할 때 행 뷰를 재사용합니다. 이 경우 "변환"은 null이 아니며 "name = (TextView) row.findViewById (R.id.product_name)"을 실행하지 않고 "name"은 null을 남깁니다. 그래서, 편지가 이름으로 텍스트를 설정하려고 할 때, 당신은 NullReference를 얻을 것입니다 – Dimmerg
그게 더 낫지 만 설명으로 답을 업데이트하면 훨씬 도움이 될 것입니다. 그것은 단지 OP와 다른 사람들이 문제를 읽고 이해하는 것을 더 쉽게하며, 왜 이것이 문제를 해결 하는지를 이해하게합니다. 코드 답변 만 일반적으로 다음과 같이 나타납니다. ( – codeMagic