how to display custom listview using list fragments in android
Asked Answered
C

3

6

I have divided my android screen into 2 fragements .In the first one I make a listview from server database to android mobile.The problem is that I can't call getview method in the base adapter class. Do help me out

    public class MyListFragment1 extends ListFragment {

ImageView back;
String url = Main.url;
String Qrimage;
Bitmap bmp;
ListView  list ;

AppetiserFragment adapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    return inflater.inflate(R.layout.applistviewfragment, container, false);

}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    // back=(ImageView)findViewById(R.id.backfoodmenu);
    /*
     * back.setOnClickListener(new OnClickListener() {
     * 
     * public void onClick(View v) { // TODO Auto-generated method stub
     * Intent intent=new Intent(getApplicationContext(),FoodMenu.class);
     * intent.putExtra("url", url); startActivity(intent); } });
     */
    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

    InputStream is = null;
    String result = "";
    JSONObject jArray = null;
    try {
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url + "test.php3");
        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    } catch (Exception e) {
        // TODO: handle exception
        Log.e("Log", "Error in Connection" + e.toString());

        // Intent intent = new Intent(ViewQRCode.this, PimCarder.class);

        // startActivity(intent);

    }
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        result = sb.toString();
        jArray = new JSONObject(result);

        JSONArray json = jArray.getJSONArray("appetiser");

        Context context = null;
        context = this.getActivity().getApplicationContext();
                   //(Here i want give lisid from xml)
                     list=(Listview)findViewById(R.id.list);//i type here it shows an error
        adapter = new AppetiserFragment(context, json);

        context = getActivity().getApplicationContext();
        list.setAdapter(adapter);

    } catch (Exception e) {
        // TODO: handle exception
        Log.e("log", "Error in Passing data" + e.toString());
    }
}

}

AppetiserFragment.java

          public class AppetiserFragment extends BaseAdapter {

String url = Main.url;
public Context Context;
String qrimage;
Bitmap bmp, resizedbitmap;
Bitmap[] bmps;
Activity activity = null;
private LayoutInflater inflater;

private ImageView[] mImages;
String[] itemimage;
TextView[] tv;
String itemname, price, desc, itemno;
String[] itemnames, checkeditems, itemnos;
String[] prices;
String[] descs;
HashMap<String, String> map = new HashMap<String, String>();

public AppetiserFragment(Context context, JSONArray imageArrayJson) {
    Context = context;
    // inflater =

    System.out.println(imageArrayJson);
    // (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    // imageLoader=new ImageLoader(activity);
    inflater = LayoutInflater.from(context);
    this.mImages = new ImageView[imageArrayJson.length()];
    this.bmps = new Bitmap[imageArrayJson.length()];
    this.itemnames = new String[imageArrayJson.length()];
    this.prices = new String[imageArrayJson.length()];
    this.descs = new String[imageArrayJson.length()];
    this.itemnos = new String[imageArrayJson.length()];
    try {

        for (int i = 0; i < imageArrayJson.length(); i++) {
            JSONObject image = imageArrayJson.getJSONObject(i);

            qrimage = image.getString("itemimage");
            itemname = image.getString("itemname");
            itemno = new Integer(i + 1).toString();
            price = image.getString("price");
            desc = image.getString("itemdesc");
            System.out.println(price);//here i can print price
            itemnames[i] = itemname;
            prices[i] = price;
            descs[i] = desc;
            itemnos[i] = itemno;

            byte[] qrimageBytes = Base64.decode(qrimage.getBytes());

            bmp = BitmapFactory.decodeByteArray(qrimageBytes, 0,
                    qrimageBytes.length);
            int width = 100;
            int height = 100;
            resizedbitmap = Bitmap.createScaledBitmap(bmp, width, height,
                    true);
            bmps[i] = bmp;

            mImages[i] = new ImageView(context);
            mImages[i].setImageBitmap(resizedbitmap);

            mImages[i].setScaleType(ImageView.ScaleType.FIT_START);

            // tv[i].setText(itemname);
        }
        System.out.println(map);

    } catch (Exception e) {
        // TODO: handle exception
    }
}

public AppetiserFragment() {
    // TODO Auto-generated constructor stub
}

public int getCount() {
    return mImages.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}


public View getView(final int position, View convertView, ViewGroup parent) {

    View view = convertView;
    final ViewHolder viewHolder;
    if (view == null) {
        view = inflater.inflate(R.layout.appetiserlistview, null);
        System.out.println("prakash");
        viewHolder = new ViewHolder();
        viewHolder.image = (ImageView) view
                .findViewById(R.id.appetiserimage);
        viewHolder.text = (TextView) view.findViewById(R.id.appetisertext);
        viewHolder.desc = (TextView) view.findViewById(R.id.appetiserdesc);
        viewHolder.price = (TextView) view
                .findViewById(R.id.appetiserprice);
        viewHolder.appitemnum = (TextView) view
                .findViewById(R.id.appitemno);
        // viewHolder.checkbox = (CheckBox) view.findViewById(R.id.bcheck);

        view.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) view.getTag();
    }
    viewHolder.image.setImageBitmap(bmps[position]);
    viewHolder.appitemnum.setText(itemnos[position]);
    viewHolder.price.setText(prices[position]);
    viewHolder.desc.setText(descs[position]);
    // viewHolder.checkbox.setTag(itemnames[position]);
    ViewHolder holder = (ViewHolder) view.getTag();
    holder.text.setText(itemnames[position]);


    return view;
}


static class ViewHolder {

    protected TextView text, price, desc, appitemnum;
    protected ImageView image;

}

 }

i can able to print json data in base adpater class . Now i want pass json data in to text,image. i thought getview method is not calling . please help me

Caron answered 8/6, 2012 at 7:20 Comment(0)
T
1

You can also user ListActivity instead of ListFragment. It will behave like normal activity and you can find all the list related methods easily.

like this..,

 public class MainActivity extends ListActivity {
oncreate() {
** code
ListView list = getListView();

 **code
}
}
Tajuanatak answered 26/8, 2014 at 12:42 Comment(0)
M
0

I think as you are using the custom list with you id "R.id.list" so no need to extend your fragment with listFragment extend with Fragment only.

other wise if you want use the listFragment then use like in XML

<ListView  android:id="@id/android:list"  android:layout_height="fill_parent"
        android:layout_width="fill_parent" android:layout_weight="1.0"
        android:layout_marginTop="2dip" android:scrollingCache="false"
        android:clickable="true" android:cacheColorHint="#00000000"
        android:focusable="true"
         android:background="@drawable/listfocused"
        android:dividerHeight="1dip"  xmlns:android="http://schemas.android.com/apk/res/android"/>

in java get list as

ListView  list = this.getListView();
Macready answered 8/6, 2012 at 7:29 Comment(3)
i kept list as like u given to my xml. and then i changed java code as like ListView list = this.getListView();.. but i get same exception as data.lang.null pointer exceptionCaron
see this code developer.android.com/guide/topics/fundamentals/fragments.html as not sure what you missed in code.....Macready
please see my updated code . I want call list id from xml to java . if i call it shows an erroorCaron
R
0
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {    
...
    list=(Listview)findViewById(R.id.list);//i type here it shows an error
...
}

This is because you are trying to find the views in the onCreate() method; at this point of time, the fragment's layout has not yet been inflated, hence all findViewById() calls will return null.

You can only find the view after the layout is inflated, which is in onCreateView(). So override the onCreateView() method and call findViewById() and set the list's adapter there!

Reticular answered 21/11, 2013 at 7:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.