2014-05-17 2 views
0
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view; 
    ViewHolder holder; 

    if (null == convertView) { 
     view = inflater.inflate(R.layout.web_courses_list_item, null); 
     // Set table view color for each new row 
     view.setBackgroundColor(0xFFF0F0F0); 

     // Create the view holder 
     holder = new ViewHolder(); 
     holder.CourseName = (TextView) view.findViewById(R.id.course_name); 
     holder.CourseDesc = (TextView) view.findViewById(R.id.course_desc); 
     holder.DltButton = (Button) view.findViewById(R.id.btn_remove); 
     final int pos = position; 
     holder.DltButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(final View v) { 
       if(v==null) { 
        Log.v("RemoveCheck", "view v is null"); 
        return; 
       } 
       Builder builder = new Builder(mContext); 
       builder.setTitle("Alert!!!!"); 
       builder.setMessage("Are you sure you want to delete "+mCoursesList.get(pos).getName()); 
       builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         mCoursesList.get(pos).setVisible(false); 
         mCoursesList.remove(pos); 
         v.setVisibility(View.GONE); 
         CoursesChangeData(mCoursesList); 
        } 
       }); 

       builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
        } 
       }); 

       builder.create().show(); 
      } 
     }); 
     view.setTag(holder); 
    } else { 
     view = convertView; 
     holder = (ViewHolder) view.getTag(); 
    } 

    CourseData current = mCoursesList.get(position); 
    holder.CourseName.setText(current.getName()); 
    holder.CourseDesc.setText(current.getDesc()); 
    if (mCoursesList.get(position).isVisible()) 
     holder.DltButton.setVisibility(View.VISIBLE); 
    else 
     holder.DltButton.setVisibility(View.GONE); 
    return view; 
} 

안녕하세요, 삭제 버튼을 클릭하여 처리하는 baseAdapter 메서드를 구현했습니다.onClick 이벤트를 처리 할 때 getView에서 null 포인터 예외가 발생했습니다.

05-17 21:56:15.579: E/AndroidRuntime(18584): FATAL EXCEPTION: main 
05-17 21:56:15.579: E/AndroidRuntime(18584): Process: com.example.webcourse, PID: 18584 
05-17 21:56:15.579: E/AndroidRuntime(18584): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.view.ViewRootImpl.setView(ViewRootImpl.java:540) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.app.Dialog.show(Dialog.java:286) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at com.example.webcourse.CoursesListAdapter$1.onClick(CoursesListAdapter.java:111) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.view.View.performClick(View.java:4445) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.view.View$PerformClick.run(View.java:18429) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.os.Handler.handleCallback(Handler.java:733) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.os.Handler.dispatchMessage(Handler.java:95) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.os.Looper.loop(Looper.java:136) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at android.app.ActivityThread.main(ActivityThread.java:5081) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at java.lang.reflect.Method.invokeNative(Native Method) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at java.lang.reflect.Method.invoke(Method.java:515) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-17 21:56:15.579: E/AndroidRuntime(18584): at dalvik.system.NativeStart.main(Native Method) 
05-17 21:56:15.584: W/ActivityManager(2330): Force finishing activity com.example.webcourse/.CoursesActivity 
+0

라인 87은 무엇입니까? – user3535778

+2

final int pos = (정수) v.getTag(); –

+0

v.getTag()가 null 인 경우 – user3535778

답변

1

: 삭제 버튼 i가 그 충돌 삭제에 터치가 볼 수리스트 뷰 항목 와이프,까지는 보이지 여기 호출 스택이다 (에러 라인 builder.create().show(); ;이 라인 111에서이다) ViewHolder를 뷰의 태그로 설정합니다. 그러나 getTag를 호출 할 때는 int 형으로 형변환됩니다. 이것이 문제입니다. int가 될 수 없으므로 예외가됩니다.

+0

수정 된 버전을 확인하십시오. 지금 문제가 무엇입니까? –

+0

라인 변경 - 빌더 빌더 = 새 빌더 (mContext); 빌더 빌더 = 새 빌더 (이); – essess

+0

생성자 AlertDialog.Builder (새 View.OnClickListener() {})는 정의되지 않습니다. –

0

상황이 최종적인 것인지 여부를 알 수 없습니다. 다음을 사용해야합니다. v.getContext()

0

view.gone을 설정할 수 없습니다. 다른 요소에 대해서는보기가 다시 사용됩니다. 데이터 세트를 변경 한 후 어댑터를 무효화해야합니다. 목록에서 개체를 제거하고 무효화하지 않기 때문에 어댑터는 null pnt 예외를 발생시키는 마지막 요소에 액세스하려고 시도합니다.

이 스레드 확인 Updating the list view when the adapter data changes

관련 문제