2

I have ListView with CustomAdapter and now onclick of any item which can be accessed by scrolling the listview I am getting nullpointerexception. Also when I am clicking on any of the item which is fit in screen size then after scrolling particular element also get selected..like if I am selecting 4th position and at a time 8 items are shown then 12th item will also get selected..

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);

}

}

LOGCAT:

    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
user3606902
  • 829
  • 1
  • 10
  • 25

3 Answers3

0

Problem is probably here:

 View v = checkpoints_list.getChildAt(position);

Variable position specifies position within visible listview items. Use method argument View view or follow instructions here.

Community
  • 1
  • 1
skywall
  • 3,956
  • 1
  • 34
  • 52
0

try this:

@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);

}
DCoder
  • 3,486
  • 7
  • 36
  • 68
0

My answer is too late, but give answer if can be helpful to others.

At first, I tried to get element throughAdapterView<?> parent argument of OnItemClickListener. It is same result that use View view argument like questioner.

My code :

    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
       }
    });

And it's solved by use adpater instead of get parameter. Like this :

    //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();
         }
    });

It's really helpful for me :)

Soyeon Kim
  • 608
  • 7
  • 34