6

Tôi đã chia màn hình Android thành 2 đoạn .Trong phần đầu tiên tôi tạo danh sách từ cơ sở dữ liệu máy chủ thành điện thoại di động android. Tôi không thể gọi phương thức getview lớp bộ điều hợp cơ sở. Đừng giúp tôi racách hiển thị chế độ xem danh sách tùy chỉnh sử dụng các phân đoạn danh sách trong 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; 

} 

} 

tôi có thể có khả năng in dữ liệu json trong lớp cơ sở adpater. Bây giờ tôi muốn truyền dữ liệu json vào văn bản, hình ảnh. tôi nghĩ phương pháp getview không gọi. hãy giúp tôi

Trả lời

0

Tôi nghĩ rằng khi bạn đang sử dụng danh sách tùy chỉnh với id "R.id.list", bạn không cần phải mở rộng đoạn của mình với listFragment mở rộng chỉ với Fragment.

khác khôn ngoan if you want use the listFragment sau đó sử dụng như thế nào trong 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"/> 

trong java danh sách get như

ListView list = this.getListView(); 
+0

tôi giữ danh sách như như u cho xml của tôi. và sau đó tôi đã thay đổi mã java giống như ListView list = this.getListView(); .. nhưng tôi có ngoại lệ giống như data.lang.null pointer exception – naveen

+0

xem mã này http://developer.android.com/guide/topics/ Fundamentals/fragments.html không chắc chắn những gì bạn đã bỏ lỡ trong mã ..... –

+0

vui lòng xem mã cập nhật của tôi. Tôi muốn id danh sách cuộc gọi từ xml đến java. nếu tôi gọi nó là một sự phá hoại – 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 
... 
} 

này là bởi vì bạn đang cố gắng tìm các quan điểm trong phương pháp onCreate(); tại thời điểm này, bố cục của đoạn chưa được tăng lên, do đó tất cả các cuộc gọi findViewById() sẽ trả về giá trị rỗng.

Bạn chỉ có thể tìm thấy chế độ xem sau khi bố cục được tăng cao, nằm trong onCreateView(). Vì vậy, hãy ghi đè phương thức onCreateView() và gọi findViewById() và đặt bộ điều hợp danh sách ở đó!

1

Bạn cũng có thể sử dụng ListActivity thay vì ListFragment. Nó sẽ hoạt động như hoạt động bình thường và bạn có thể tìm thấy tất cả các phương pháp liên quan đến danh sách một cách dễ dàng.

như thế này ..,

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

**code 
} 
} 
Các vấn đề liên quan