6

anzuzeigen Ich habe meine Android-Bildschirm in 2 Fragmente aufgeteilt. In der ersten mache ich eine Listview von Server-Datenbank zu Android Mobile.Das Problem ist, dass ich getview Methode nicht aufrufen kann die Basisadapterklasse. Sie helfen mirwie benutzerdefinierte listview mit list fragmente in 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; 

} 

} 

ich in der Lage kann json Daten in Basis adpater Klasse zu drucken. Jetzt möchte ich JSON-Daten in Text, Bild übergeben. Ich dachte, dass getview Methode nicht anruft. Bitte helfen Sie mir

Antwort

0

Ich denke, wie Sie die benutzerdefinierte Liste mit Ihnen ID "R.id.list" verwenden, so dass keine Notwendigkeit, Ihr Fragment mit listFragment erweitern nur mit Fragment erweitern.

andere wiesen if you want use the listFragment dann wie in XML verwenden

<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-Liste als

ListView list = this.getListView(); 
+0

i gehalten Liste als wie u meiner xml gegeben. und dann änderte ich Java-Code wie listView list = this.getListView(); .. aber ich bekomme die gleiche Ausnahme wie data.lang.null Zeiger Ausnahme – naveen

+0

siehe diesen Code http://developer.android.com/guide/topics/ Grundlagen/fragments.html als nicht sicher, was Sie in Code verpasst haben ..... –

+0

siehe meinen aktualisierten Code. Ich möchte Anruflisten-ID von XML nach Java. Wenn ich anrufe, zeigt sich ein Fehler – 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 
... 
} 

Dies liegt daran, dass Sie die Ansichten in der onCreate() Methode versuchen zu finden; Zu diesem Zeitpunkt ist das Layout des Fragments noch nicht aufgebläht, daher geben alle findViewById() Aufrufe null zurück.

Sie können die Ansicht nur finden, nachdem das Layout aufgebläht wurde, also in onCreateView(). Überschreibe also die onCreateView() Methode und rufe findViewById() an und setze dort den Adapter der Liste!

1

Sie können auch ListActivity anstelle von ListFragment verwenden. Es wird sich wie normale Aktivität verhalten und Sie können alle listenbezogenen Methoden leicht finden.

wie dieses ..,

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

**code 
} 
} 
Verwandte Themen