我有一个listView,里面有信息,当我点击一行时,它必须给我所选行下的所有细节,在那个选择行我有图像,图像名称,价格等。 因此,当我在listView中单击图像时,它必须填充所有信息,包括下一个活动中的图像
我试图在我的listView上显示,好吧,这里是我的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
JSONObject json = JSONfunctions.getJSONfromURL("http://10.0.2.2/php/p.php");
try{
JSONArray earthquakes = json.getJSONArray("prop");
for(int i=0;i<earthquakes.length();i++){
JSONObject e = earthquakes.getJSONObject(i);
String BookName = e.getString("P_City");
PNames.add(BookName);
String BookImg = e.getString("Pname");
PImages.add(BookImg);
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
setListAdapter(new MobileArrayAdapter(this, PNames,PImages));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
String selectedValue = (String) getListAdapter().getItem(position);
Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show();
Intent i = new Intent(getApplicationContext(), Searching.class);
// sending data to new activity
i.putExtra("product", selectedValue);
startActivity(i);
}
}
编辑:
private final Context context;
private final String[] myBookNamelist = null;
private ArrayList<String> MyP = new ArrayList<String>();
private ArrayList<String> myPurl = new ArrayList<String>();
//ArrayList<HashMap<String, String>> myBookNamelist = new ArrayList<HashMap<String, String>>();
//ArrayList<HashMap<String, String>> myBookImageurl = new ArrayList<HashMap<String, String>>();
public MobileArrayAdapter(Context context,ArrayList<String> Bname,ArrayList<String> BUrl) {
super(context, R.layout.list_mobile, Bname);
this.context = context;
this.MyP = Bname;
this.myPurl = BUrl;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.list_mobile, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
textView.setText(MyP.get(position));
Bitmap bitmap = null;
// Change icon based on name
JSONObject json = JSONfunctions.getJSONfromURL("http://10.0.2.2/php/p.php");
// http://api.geonames.org/earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=demo
try{
JSONArray earthquakes = json.getJSONArray("prop");
//for(position=0;position<earthquakes.length();position++){
JSONObject e = earthquakes.getJSONObject(position);
String BB = e.getString("P_City");
MyP.add(BB);
String UU = e.getString("Pname");
myPurl.add(UU);
//}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
String s = MyP.get(position);
String i = myPurl.get(position);
System.out.println(s);
System.out.println(i);
try {
bitmap = BitmapFactory.decodeStream((InputStream)new URL(i).getContent());
} catch (MalformedURLException err) {
// TODO Auto-generated catch block
err.printStackTrace();
} catch (IOException err) {
// TODO Auto-generated catch block
err.printStackTrace();
}
//if (!s.equals("")) {
imageView.setImageBitmap(bitmap);
//} else {
System.out.println("Bitmap image: "+position+"="+bitmap);
//imageView.setImageResource(R.drawable.android_logo);
//}
return rowView;
}
}
我可以将位置传递给下一个课程,但如何从所选行中获取所有信息?
答案 0 :(得分:5)
我现在尝试这个代码已经两天了,然后我就知道了,所以在这里它会... OnListItemClick会传递一个位置:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
String selectedValue = (String) getListAdapter().getItem(position);
Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show();
Intent moreDetailsIntent = new Intent(ListMobileActivity.this,PropertiesDetails.class);
Bundle dataBundle = new Bundle();
dataBundle.putString("SelectedProperty", selectedValue);
moreDetailsIntent.putExtras(dataBundle);
startActivity(moreDetailsIntent);
}
然后第二课将收到包括图像的值:
String Price,Desc,City,rooms,address,size,garage,sold,Pname,image1,image2,image3;
Bitmap bitmap,bitmap1,bitmap2,bitmap3;
TextView txtPrice,txtDesc,txtCity,txtrooms,txtaddress,txtsize,txtgarage,txtsold;
ImageView imgpropertyImage,imgpropertyImage2;
String result = null;
InputStream is = null;
StringBuilder sb=null;
Button btnNext,btnPrevs;
int imgcount = 1;
JSONPARSER jsonParser = new JSONPARSER();
private static String url_create_product = "http://10.0.2.2/php/ViewPropertiesByName.php";
// JSON Node names
// private static final String TAG_SUCCESS = "success";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.thenew);
txtPrice = (TextView) findViewById(R.id.price);
txtDesc = (TextView) findViewById(R.id.desc);
txtCity = (TextView) findViewById(R.id.City);
txtrooms = (TextView) findViewById(R.id.Rooms);
txtaddress = (TextView) findViewById(R.id.Address);
txtsize = (TextView) findViewById(R.id.Size);
txtgarage = (TextView) findViewById(R.id.garage);
// txtsold = (TextView) findViewById(R.id.sold);
imgpropertyImage = (ImageView) findViewById(R.id.imageViewProp);
imgpropertyImage2 = (ImageView) findViewById(R.id.imageViewProp2);
btnNext =(Button) findViewById(R.id.btnNext);
btnPrevs =(Button) findViewById(R.id.btnPrevis);
Bundle b = getIntent().getExtras(); // Getting the Bundle object that pass from another activity
String SelectedProperty = b.getString("SelectedProperty");
////////////////////////Executing A Search Query//////////////////////////////////
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("P_City",SelectedProperty));
//getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_create_product,
"POST", postParameters);
// check log cat fro response
Log.d("Create Response", json.toString());
/////////////Getting Jason Object from the search Query and displaying results
try{
JSONArray earthquakes = json.getJSONArray("PropertyDetails");
for(int i=0;i<earthquakes.length();i++){
JSONObject e = earthquakes.getJSONObject(i);
Price = e.getString("P_Price");
Desc = e.getString("P_Desc");
City = e.getString("P_City");
rooms = e.getString("P_Rooms");
address = e.getString("P_Address");
size = e.getString("P_Size");
garage = e.getString("P_garage");
//sold = e.getString("P_Sold");
Pname = e.getString("Pname");
image1 = e.getString("image1");
image2 = e.getString("image2");
image3 = e.getString("image3");
//BookImages.add(BookImg);
}
我帮助那些将来会遇到同样问题的人:)
答案 1 :(得分:2)
我相信你正在扩展ArratAdapter
并且必须在row.xml
下getView
充气。并且假设你的row.xml具有属性imagename和price。然后你将使用下面的内容用于提取这些值的代码段。
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView <? > myAdapter, View myView, int myItemInt, long mylng) {
String imageName = ((TextView) myView.findViewById(R.id.imageName)).getText().toString();
String price = ((TextView) myView.findViewById(R.id.price)).getText().toString();
}
});