2014-09-28 3 views
2

을 스크롤 한 후 항목을 클릭하는 동안 나는 CustomAdapterListView 내가 nullpointerexception를 받고 오전 listview을 스크롤하여 액세스 할 수있는 모든 항목의 현재 onclick 있습니다. 또한 화면 크기에 맞는 항목을 클릭 할 때 특정 요소를 스크롤 한 후에도 선택됩니다. 예를 들어 4 위를 선택하면 8 개의 항목이 표시되고 12 번째 항목도 선택됩니다.NullPointerException이

public class SelectCheckPoints extends ListActivity implements OnItemClickListener{ 
String s1[]; 
ListView checkpoints_list; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.select_checkpoints); 

    Bundle b = this.getIntent().getExtras(); 
    s1 = b.getStringArray("array_checkpoints"); 
    checkpoints_list=getListView(); 

    checkpoints_list.setAdapter(new ItemAdapter()); 

    checkpoints_list.setOnItemClickListener(this); 
} 



public class ItemAdapter extends BaseAdapter { 

    // private ImageLoadingListener animateFirstListener = new 
    // AnimateFirstDisplayListener(); 

    @Override 
    public int getCount() { 
     return s1.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return s1[position]; 
    } 

    @Override 
    public long getItemId(int position) { 
     Log.d("test id",position+""); 
     return position; 
    } 

    @SuppressLint("InflateParams") 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if(convertView == null){ 
      // LayoutInflater class is used to instantiate layout XML file into its corresponding View objects. 
      LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.checkpoint_listitem, null); 
     } 

     TextView checkpoints_name = (TextView) convertView.findViewById(R.id.checkpoints_name);   
     checkpoints_name.setText(s1[position]); 

     return convertView; 

    } 

} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 
    // TODO Auto-generated method stub 

    Log.d("check","in"); 
    View v=checkpoints_list.getChildAt(position); 
    CheckBox chk1=(CheckBox)v.findViewById(R.id.check); 
    TextView title = (TextView) v.findViewById(R.id.checkpoints_name); 
    if(chk1.isChecked()) 
    { 
     chk1.setChecked(false); 
     Log.e("check or not","not"); 
    } 
    else 
    { 
     chk1.setChecked(true); 

     Log.e("check or not","not"); 
    } 
    Log.d("check or not",title.getText().toString()); 
    Log.d("check",position+" "+id); 

} 

}

로그 캣 :

09-28 15:37:36.445: E/AndroidRuntime(2672): FATAL EXCEPTION: main 
09-28 15:37:36.445: E/AndroidRuntime(2672): java.lang.NullPointerException 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at com.example.shareryde.book_share.SelectCheckPoints.onItemClick(SelectCheckPoints.java:89) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at android.widget.AdapterView.performItemClick(AdapterView.java:298) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at android.widget.AbsListView.performItemClick(AbsListView.java:1100) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at android.widget.AbsListView$1.run(AbsListView.java:3423) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at android.os.Handler.handleCallback(Handler.java:725) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at android.os.Looper.loop(Looper.java:137) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
09-28 15:37:36.445: E/AndroidRuntime(2672):  at dalvik.system.NativeStart.main(Native Method) 
09-28 15:37:38.125: I/Process(2672): Sending signal. PID: 2672 SIG: 9 
09-28 15:37:38.325: E/Trace(2704): error opening trace file: No such file or directory (2) 
09-28 15:37:38.569: D/(2704): HostConnection::get() New Host Connection established 0xb798d068, tid 2704 
+2

당신이 같은 시도 :'CheckBox의 CHK1 = (CheckBox의) view.findViewById (R.id.check)'? –

+0

Logcat을 게시 할 수 있습니까? – DCoder

+0

예. 하지만 나에게도 같은 오류가 발생합니다 – user3606902

답변

0

문제는 아마 여기에 있습니다 :

View v = checkpoints_list.getChildAt(position); 

가변 위치는 내에서 위치를 지정합니다. 목록보기 항목입니다. 메소드 인수 View view을 사용하거나 지침 here을 따르십시오.

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 

    Log.d("check","in"); 

    CheckBox chk1=(CheckBox)view.findViewById(R.id.check); 
    TextView title = (TextView) view.findViewById(R.id.checkpoints_name); 
    if(chk1.isChecked()) 
    { 
     chk1.setChecked(false); 
     Log.e("check or not","not"); 
    } 
    else 
    { 
     chk1.setChecked(true); 
     Log.e("check or not","not"); 
    } 
    Log.d("check or not",title.getText().toString()); 
    Log.d("check",position+" "+id); 

} 
0

이 시도.

우선, AdapterView<?> parent 인수를 통해 요소를 OnItemClickListener으로 가져 오려고했습니다. 질문자와 같이 View view 인수를 사용하는 것과 같은 결과입니다.

내 코드 :

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      ListView lv = (ListView) parent; 
      TextView tv = (TextView) lv.getChildAt(position); //tv gets null 

      Toast.makeText(getActivity(), tv.getText().toString(), Toast.LENGTH_SHORT).show(); //NullPointerException 
     } 
    }); 

그리고 대신 GET 매개 변수를 사용 adpater 해결합니다. 이처럼 :

//this is my adapter 
    mAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_multiple_choice, mListArray); 
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Toast.makeText(getActivity(), mAdapter.getItem(position), Toast.LENGTH_SHORT).show(); 
     } 
    }); 

그것은 나를 위해 정말 도움이 :)

0

내 대답이 너무 늦게, 그러나 다른 사람에게 도움이 될 수 있다면 대답을 줄 :