我将我的android屏幕划分为2个fragements。在第一个我从服务器数据库到android mobile制作一个listview。问题是我不能在基础适配器类中调用getview方法。帮帮我
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;
}
}
我可以在base adpater类中打印json数据。现在我想将json数据传递给text,image。我以为getview方法不是在调用。请帮帮我
答案 0 :(得分:1)
您也可以使用ListActivity而不是ListFragment。 它的行为与普通活动相似,您可以轻松找到所有与列表相关的方法。
像这样.., public class MainActivity extends ListActivity {
oncreate() {
** code
ListView list = getListView();
**code
}
}
答案 1 :(得分:0)
我认为当你使用id为“R.id.list”的自定义列表时,所以不需要使用只有Fragment的listFragment扩展来扩展你的片段。
其他明智的if you want use the listFragment
然后像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"/>
在java获取列表中
ListView list = this.getListView();
答案 2 :(得分: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
...
}
这是因为您试图在onCreate()
方法中查找视图;在这个时间点,片段的布局还没有被夸大,因此所有findViewById()
调用都将返回null。
您只能在布局膨胀后找到视图,该视图位于onCreateView()
中。因此,覆盖onCreateView()
方法并调用findViewById()
并在那里设置列表的适配器!