6

J'ai divisé mon écran android en 2 fragements. Dans le premier je fais une listview de la base de données du serveur pour android mobile. Le problème est que je ne peux pas appeler la méthode getview dans la classe d'adaptateur de base. N'aidez-moicomment afficher la liste personnalisée en utilisant des fragments de liste dans 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; 

} 

} 

je peux en mesure d'imprimer des données JSON en classe de base adpater. Maintenant, je veux passer les données json dans le texte, l'image. Je pensais que la méthode getview ne m'appelait pas. aidez-moi s'il vous plaît

Répondre

0

Je pense que vous utilisez la liste personnalisée avec votre id "R.id.list" donc pas besoin d'étendre votre fragment avec listFragment étendre avec Fragment seulement.

autres sages if you want use the listFragment utilisent alors comme 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"/> 

dans la liste get java comme

ListView list = this.getListView(); 
+0

i gardé la liste que comme u donné à mon xml. et puis j'ai changé le code java comme ListView list = this.getListView(); .. mais je reçois la même exception que l'exception de pointeur data.lang.null – naveen

+0

voir ce code http://developer.android.com/guide/topics/ fundamentals/fragments.html car vous ne savez pas ce que vous avez manqué dans le code ..... –

+0

s'il vous plaît voir mon code mis à jour. Je veux un identifiant de liste d'appels de xml à java. si je l'appelle montre un erroor – 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 
... 
} 

Ceci est parce que vous essayez de trouver les points de vue dans la méthode onCreate(); À ce moment-là, la disposition du fragment n'a pas encore été gonflée, donc tous les appels findViewById() retourneront null.

Vous ne pouvez trouver la vue qu'après avoir gonflé la mise en page, qui se trouve dans onCreateView(). Remplacez donc la méthode onCreateView() et appelez findViewById() et définissez l'adaptateur de la liste ici!

1

Vous pouvez également utiliser ListActivity au lieu de ListFragment. Il se comportera comme une activité normale et vous pouvez trouver facilement toutes les méthodes liées à la liste.

comme ça ..,

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

**code 
} 
} 
Questions connexes