2012-05-26 134 views
6

我曾使用ListView顯示從數據庫中檢索的一些數據(字符串)...很簡單,但我的一個cooworkers決定將圖像放在屏幕上的文本前面。我們無法使用ListView做到這一點,但我們發現了一些GridView的例子,看起來和我們需要的完全一樣,然後我們花了一些時間使用GridView,並將圖像放在文本的前面。如何使用ImageAdapter從Gridview中獲取所選項目? (Android)

現在,不幸的是,我們不知道如何選擇的項目(基於從選擇的產品隨附的文本)

我使用OnItemClickListener,並在onItemClick方法gridView.getItemSelectedAtPosition() ,但我得到的一切都是「空」。

我現在不是如果ImageAdapter與它有關係,因爲如果我將它更改爲一個ArrayAdapter我可以正確地獲得正確的項目,但在這種方式沒有行中的圖像。

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

我該怎麼辦?

編輯 - ListView控件源

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

,以及您的圖像適配器的代碼看起來像? –

+0

@TomaszGawel我們做的唯一的事情就是設置適配器gridView.setAdapter(new ImageAdapter(this,name_array,description_array)); – user1419496

+0

但ImageAdapter不是標準類,因此提供了ImageAdapter類的代碼,因爲我懷疑它的getItem方法只是爲您的情況返回null。 –

回答

7

gridView.getItemAtPosition(position)調用適配器的getItem(int position)場景下 - 這樣實現getItemImageAdapter類返回某事,讓你識別選擇什麼(也許mobileValues[position]是不夠或者只是你寫入textview:mobileValues[position] + "\n" + mobileValuesD[position])。

另一方面在onItemClick(AdapterView<?> parent, View v, int position, long id)你已經擁有所選項目的位置也許它是足夠的信息?你要在那個聽衆中做什麼?

我已經把一些更改適配器:

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

非常感謝Tomasz Gawel!現在一切都運行完美! – user1419496

+0

如何在單擊項目時通過recylerview getItemAtPosition(位置)獲取類數據。 –

相關問題