2017-04-06 77 views
0

我正在制作android应用程序,并且我有一个来自json解析的数据库的listview。我想在列表视图中的Onclick项目打开其他活动,我没有问题,当任何项目点击时打开新的活动。但问题是我不知道我点击了哪个项目,并将项目细节显示给新的活动。Android的listview如何知道我点击并显示在其他活动中的哪个项目

public class items extends BaseActivity { 

private ProgressDialog pDialog; 
private ArrayList<RowItem> rowItems = new ArrayList<RowItem>(); 
private ListView mylistview; 
private CustomListAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_items); 

    pDialog = new ProgressDialog(this); 
    pDialog.setMessage("Loading..."); 
    pDialog.show(); 

    Response.Listener<String> responseListener = new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      try { 
       JSONObject jsonResponse = new JSONObject(response); 
       boolean error = jsonResponse.getBoolean("error"); 
       System.out.println(jsonResponse.toString()); 
       if (error){ 
        String errorMessage = jsonResponse.getString("message"); 
        AlertDialog.Builder builder = new AlertDialog.Builder(items.this); 
        builder.setMessage(errorMessage) 
          .setNegativeButton("Retry", null) 
          .create() 
          .show(); 
       }else { 
        JSONArray itemSet = jsonResponse.getJSONArray("itemSet"); 
        for (int i = 0; i < itemSet.length(); i++){ 
         JSONObject item = itemSet.getJSONObject(i); 
         String title = item.getString("title"); 
         String seller = item.getString("nickName"); 
         String price = item.getString("price"); 
         String itemID = item.getString("itemID"); 
         String image_view = item.getString("picPath"); 
         String Path; 
         JSONArray pic = item.getJSONArray("picPath"); 
         if (pic.length()==0) 
         { 
          Path="uploads/default.jpg"; 
         }else { 
          Path = pic.getString(0); 
         } 
         RowItem row=new RowItem(title,seller,price,image_view,Path,itemID); 
         rowItems.add(row); 

        } 
        mylistview = (ListView) findViewById(R.id.list); 
        CustomListAdapter adapter = new CustomListAdapter(items.this, rowItems); 
        System.out.println(rowItems.isEmpty()); 
        mylistview.setAdapter(adapter); 

        mylistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
         @Override 
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
          Intent intent = new Intent(items.this, ItemDetail.class); 
          String title = ((TextView) view.findViewById(R.id.tv_title)).getText().toString(); 
          String seller = ((TextView) view.findViewById(R.id.tv_seller)).getText().toString(); 
          String price = ((TextView) view.findViewById(R.id.tv_price)).getText().toString(); 

          intent.putExtra("title", title); 
          intent.putExtra("nickName", seller); 
          intent.putExtra("price", price); 
          startActivity(intent); 

         } 
        }); 
       } 
      }catch (JSONException e){ 
       e.printStackTrace(); 
      } 
     } 
    }; 
    Intent intent = getIntent(); 
    ArrayList<String> list =intent.getStringArrayListExtra("userInfo"); 
    System.out.println(list.toString()); 
    itemRequest itemRequest = new itemRequest(list.get(0),list.get(1),responseListener); 
    RequestQueue queue = Volley.newRequestQueue(items.this); 
    queue.add(itemRequest); 

    pDialog.dismiss(); 
} 
} 

我用适配器

public class CustomListAdapter extends BaseAdapter { 
private Context context; 
private List<RowItem> rowItems; 
private LayoutInflater inflater = null; 

public static final String IMAGE_BASEURL = "http://XXXXXXXXXXXXXXXXXXXXXXXX/"; 

private LruCache<Integer, Bitmap> imageCache; 
private RequestQueue queue; 

public CustomListAdapter(Context context, List<RowItem> rowItems){ 
    this.context=context; 
    this.rowItems=rowItems; 
    inflater = LayoutInflater.from(context); 

    final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024); 
    final int cacheSize = maxMemory/8; 
    imageCache = new LruCache<>(cacheSize); 

    queue = Volley.newRequestQueue(context); 
} 
@Override 
public int getCount() { 
    return rowItems.size(); 
} 

@Override 
public Object getItem(int position) { 
    return rowItems.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return rowItems.indexOf(getItem(position)); 
} 

private class ViewHolder{ 
    ImageView imageView; 
    TextView tv_title; 
    TextView tv_seller; 
    TextView tv_price; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    final RowItem row_pos = rowItems.get(position); 
    final ViewHolder holder; 
    System.out.print("================================================================="); 
    if (convertView==null){ 
     convertView = mInflater.inflate(R.layout.custom_layout, null); 
     holder = new ViewHolder(); 
     holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title); 
     holder.tv_seller = (TextView) convertView.findViewById(R.id.tv_seller); 
     holder.tv_price = (TextView) convertView.findViewById(R.id.tv_price); 

     convertView.setTag(holder); 
    }else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    holder.tv_title.setText(row_pos.getTv_title().toString()); 
    holder.tv_seller.setText(row_pos.getTv_seller().toString()); 
    holder.tv_price.setText(row_pos.getTv_price().toString()); 

    Bitmap bitmap = imageCache.get(Integer.parseInt(row_pos.getItemID())); 
    holder.imageView = (ImageView) convertView.findViewById(R.id.image_view); 

    if (bitmap != null){ 
     holder.imageView.setImageBitmap(bitmap); 
     System.out.print("bitmap"); 
    }else { 
     String imageURL = IMAGE_BASEURL + row_pos.getPath(); 
     ImageRequest request = new ImageRequest(imageURL, new Response.Listener<Bitmap>() { 
      @Override 
      public void onResponse(Bitmap response) { 
       holder.imageView.setImageBitmap(response); 
       imageCache.put(Integer.parseInt(row_pos.getItemID()), response); 
       System.out.print(row_pos.getItemID()+"this is image"); 
      } 
     }, 90, 90, 
       Bitmap.Config.ARGB_8888, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Log.d("error", error.toString()); 
        } 
       }); 
     queue.add(request); 
    } 
    return convertView; 
} 
} 

以及如何将数据传递,我从数据库中抓取到新的活动?此外,我无法显示图像形式的PHP。我用排球库。 This is the lisetview

+0

的[拔下列表视图机器人的点击项目]可能的复制(http://stackoverflow.com/questions/32295051/remove-an-clicked-item-from-listview- android) –

+0

虽然不一样,http://stackoverflow.com/a/32295106/2684提供了你正在寻找的东西。被点击的项目有一个位置。该位置来自适配器,从适配器中获取该物品。这已经完成,问,回答和谈论,在任何搜索引擎和在这里堆栈溢出巨大的时间。 –

回答

0

如果我理解正确,您希望在两个活动之间传输数据。你可以这样说:

//send data 
mylistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     //get the item and transform it to your JsonBean 
     RowItem item= (RowItem) parent.getItemAtPosition(position);       
     Intent intent = new Intent(items.this, ItemDetail.class); 
     //put it in Intent,the item bean must implements Serializable 
     intent .putExtra("RowItem",item) 
     startActivity(intent); 
    } 

//receive data (in Activity of ItemDetail) 
RowItem rowItem =(RowItem) getIntent().getSerializableExtra("RowItem"); 
// do something with rowItem,if your want know the position of item ,your alse can transport the positon(put the position in Intent object). 
相关问题