0

This is Fragment

public class SoupFragment extends ListFragment{

    public static int [] subImages={R.drawable.tiffin,R.drawable.tiffin,R.drawable.tiffin,R.drawable.tiffin,R.drawable.tiffin,R.drawable.tiffin,R.drawable.tiffin,R.drawable.tiffin,R.drawable.tiffin};
    public static String [] subItmList={"Let Us C","c++","JAVA","Jsp","Microsoft .Net","Android","PHP","Jquery","JavaScript"};
    CustomAdapter customAdp;

    public SoupFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_soup, container, false);
        ListView lv = (ListView)view.findViewById(R.id.listView);

            customAdp = new CustomAdapter(SoupFragment.this,subItmList,subImages);

        //lv.setAdapter(new CustomAdapter(getActivity().getApplicationContext(),R.layout.list_row, subItmList,subImages));
        lv.setAdapter(customAdp);
        // Inflate the layout for this fragment
        return view;
    }

}

This is my CustomAdapter

public class CustomAdapter extends  BaseAdapter{
    String [] result;
    Context context;
    int [] imageId;
    private static LayoutInflater inflater=null;
    public CustomAdapter(SoupFragment soupFrag, String[] prgmNameList, int[] prgmImages) {
        // TODO Auto-generated constructor stub
        result=prgmNameList;
        imageId=prgmImages;
        inflater = ( LayoutInflater )context.
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return result.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public class Holder
    {
        TextView tv;
        ImageView img;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Holder holder=new Holder();
        View rowView;
        rowView = inflater.inflate(R.layout.list_row, null);
        holder.tv=(TextView) rowView.findViewById(R.id.txt_category);
        holder.img=(ImageView) rowView.findViewById(R.id.list_image);
        holder.tv.setText(result[position]);
        holder.img.setImageResource(imageId[position]);
        rowView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show();
            }
        });
        return rowView;
    }
}

My problem is while running its throwing a error

"Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference"

. What is the exact error and How to solve it.Since am new to android I don't know how to solve this error.

Pro Mode
  • 1,453
  • 17
  • 30
  • `context` is null in your `CustomAdapter` because you never initialize it. – Mike M. May 30 '17 at 07:10
  • you have to pass context from fragment to adapter – Divyesh Patel May 30 '17 at 07:10
  • 1) Add context attribute in your Custom adapter class: private Context context; 2) Add context as parameter in your adapter's constructor: public CustomAdapter(Context context, SoupFragment soupFrag, String[] prgmNameList, int[] prgmImages) { // TODO Auto-generated constructor stub this.context = context; result=prgmNameList; imageId=prgmImages; inflater = ( LayoutInflater )context. getSystemService(Context.LAYOUT_INFLATER_SERVICE); } – EtherPaul May 30 '17 at 07:11
  • 3) Create your Custom adapter in your fragment and pass the context: customAdp = new CustomAdapter(view.getContext(), SoupFragment.this,subItmList,subImages); – EtherPaul May 30 '17 at 07:11
  • Or just call `getActivity()` on `soupFrag` in the constructor. – Mike M. May 30 '17 at 07:16
  • Am getting the below error. java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' –  May 30 '17 at 07:22
  • You're extending `ListFragment`, which expects exactly what that message says. If you're going to handle the `ListView` directly yourself, then you don't need to extend `ListFragment`. Extend just `Fragment`. – Mike M. May 30 '17 at 07:24

0 Answers0