2012-05-26 41 views
6

Tôi đã sử dụng một ListView để hiển thị một số dữ liệu (String) được lấy từ cơ sở dữ liệu ... khá đơn giản, nhưng một trong những đồng nghiệp của tôi đã quyết định đặt một hình ảnh ở phía trước văn bản trên màn hình. Chúng tôi đã không thể làm điều đó với Listview, nhưng chúng tôi đã tìm thấy một số ví dụ với GridView trông chính xác như chúng tôi cần sau đó chúng tôi đã dành một số thời gian bằng cách sử dụng GridView và đã đặt hình ảnh ở phía trước của văn bản.Làm cách nào để lấy mục đã chọn từ GridView bằng ImageAdapter? (Android)

Bây giờ, tiếc là chúng tôi không biết làm thế nào để có được những sản phẩm được chọn (dựa trên các văn bản xuất phát từ mục đã chọn)

Tôi đang sử dụng OnItemClickListener, và trong vòng onItemClick phương pháp gridView.getItemSelectedAtPosition() , nhưng tất cả mọi thứ tôi nhận được là "null".

Tôi không phải bây giờ nếu ImageAdapter có gì để làm với nó, vì tôi thay đổi nó thành một ArrayAdapter tôi có thể có được đúng mục nhưng không có hình ảnh trong hàng theo cách này.

gridview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id{  String selectedItem = (String) (gridView.getItemAtPosicion(position)); //always null  } }); 

tôi có thể làm gì?

EDITED - ListView nguồn

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
public class ImageAdapter extends BaseAdapter { 
private Context context; 
private final String[] mobileValues; 
private final String[] mobileValuesD; 

public ImageAdapter(Context context, String[] mobileValues, String[] mobileValuesD) { 
this.context = context; 
this.mobileValues = mobileValues; 
this.mobileValuesD = mobileValuesD; 
} 

    public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService   (Context.LAYOUT_INFLATER_SERVICE); 
    View gridView; 

    if (convertView == null) { 

    gridView = new View(context); 

    // get layout from mobile.xml 
    gridView = inflater.inflate(R.layout.pesquisa_2, null); 

    // set value into textview 
    TextView textView = (TextView) gridView.findViewById(R.id.grid_item_label); 
    textView.setText(mobileValues[position]+"\n"+mobileValuesD[position]); 

// set image based on selected text 
    ImageView imageView = (ImageView) gridView.findViewById(R.id.grid_item_image); 

    String mobile = mobileValues[position]; 

//SELECT DAS IMAGENS 

    if (mobile.equals("pdt1")) { 
    imageView.setImageResource(R.drawable.img1); 
    } else if (mobile.equals("prd2")) { 
     imageView.setImageResource(R.drawable.feijao); 
    } else { 
     imageView.setImageResource(R.drawable.acucar); 
    } 


    } else { 
    gridView = (View) convertView; 
    } 

    return gridView; 
} 

    public int getCount() { 
     return mobileValues.length; 
} 

    public Object getItem(int position) { 
     return null; 
} 

    public long getItemId(int position) { 
     return 0; 
} 

} 
+0

Và cách mã bộ chuyển đổi hình ảnh của bạn trông như thế nào? –

+0

@TomaszGawel điều duy nhất chúng tôi đã làm là đặt AdapterView.setAdapter (new ImageAdapter (this, name_array, description_array)); – user1419496

+0

nhưng ImageAdapter không phải là một lớp tiêu chuẩn để provvide mã của lớp ImageAdapter, như tôi nghi ngờ đó là phương thức getItem đơn giản trả về null cho trường hợp của bạn. –

Trả lời

7

gridView.getItemAtPosition(position) cuộc gọi của getItem(int position) dưới cảnh bộ chuyển đổi - vì vậy thực hiện getItem trong lớp học của bạn ImageAdapter trở sth mà sẽ cho phép bạn để xác định những gì được chọn (có thể mobileValues[position] là đủ hoặc chỉ những gì bạn viết vào văn bản: mobileValues[position] + "\n" + mobileValuesD[position]).

Mặt khác trong onItemClick(AdapterView<?> parent, View v, int position, long id) bạn đã có vị trí của mục đã chọn có thể đó là đủ thông tin? bạn định làm gì trong người nghe đó?

Tôi đã đưa một số thay đổi adapter của bạn:

public class ImageAdapter extends BaseAdapter { 

    private final String[] mobileValues; 
    private final String[] mobileValuesD; 

    public ImageAdapter(String[] mobileValues, String[] mobileValuesD) { 
     this.mobileValues = mobileValues; 
     this.mobileValuesD = mobileValuesD; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
     if (view == null) { 
      view = ViewGroup.inflate(
        parent.getContext(), R.layout.pesquisa_2, null); 
     } 

     ((TextView) view.findViewById(R.id.grid_item_label)) 
       .setText(getItem(position)); 

     ((ImageView) view.findViewById(R.id.grid_item_image)) 
       .setImageResource(getImageResForPosition(position)); 

     return view; 
    } 

    private int getImageResForPosition(int position) { 
     String mobile = mobileValues[position]; 
     if (mobile.equals("pdt1")) { 
      return R.drawable.img1; 
     } else if (mobile.equals("prd2")) { 
      return R.drawable.feijao; 
     } else { 
      return R.drawable.acucar; 
     } 
    } 

    @Override 
    public int getCount() { 
     return mobileValues.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return mobileValues[position] + "\n" + mobileValuesD[position]; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 
} 
+0

Cảm ơn bạn rất nhiều Tomasz Gawel! bây giờ mọi thứ đang chạy hoàn hảo! – user1419496

+0

cách lấy dữ liệu Lớp học qua recylerview getItemAtPosition (vị trí) khi mục được nhấp. –

Các vấn đề liên quan