6

He dividido mi pantalla de Android en 2 fragements. En el primero hago una vista de lista desde la base de datos del servidor a Android. El problema es que no puedo llamar al método getview la clase de adaptador base. No me ayude a cabocómo mostrar vista de lista personalizada usando fragmentos de lista en android

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; 

} 

} 

puedo capaz de imprimir datos JSON en la clase Adpater base. Ahora quiero pasar datos JSON en texto, imagen. pensé que el método getview no está llamando. por favor, ayúdenme

Respuesta

0

Creo que está utilizando la lista personalizada con su ID "R.id.list", por lo que no es necesario extender su fragmento con listFragment y solo con Fragment.

de otra forma if you want use the listFragment a continuación, utilizar al igual que en 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"/> 

en la lista get Java como

ListView list = this.getListView(); 
+0

lista Seguí como como u dado a mi XML. y luego cambié código java como ListView list = this.getListView(); .. pero obtengo la misma excepción que data.lang.null pointer exception – naveen

+0

vea este código http://developer.android.com/guide/topics/ fundamentals/fragments.html como no estoy seguro de lo que te perdiste en el código ..... –

+0

por favor mira mi código actualizado. Quiero ID de lista de llamadas de xml a java. si lo llamo muestra un error – naveen

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 
... 
} 

Esto se debe a que está tratando de encontrar los puntos de vista en el método onCreate(); en este punto del tiempo, el diseño del fragmento aún no se ha inflado, por lo tanto, todas las llamadas findViewById() devolverán nulo.

Solo puede encontrar la vista una vez que se ha inflado el diseño, que está en onCreateView(). ¡Así que anule el método onCreateView() y llame al findViewById() y configure el adaptador de la lista allí!

1

También puede utilizar ListActivity en lugar de ListFragment. Se comportará como una actividad normal y puede encontrar todos los métodos relacionados con la lista fácilmente.

como esto ..,

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

**code 
} 
} 
Cuestiones relacionadas