2012-05-26 13 views
6

データベースから取得したデータ(String)を表示するためにListViewを使用しましたが、非常にシンプルですが、私の同僚の1人が画面のテキストの前にイメージを置くことにしました。 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  } }); 

私は何ができますか?

EDITED - 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(新しいImageAdapter(this、name_array、description_array))を設定することでした。 – user1419496

+0

ImageAdapterは標準クラスではありませんのでImageAdapterクラスのコードを作成してください。getItemメソッドは単純にnullを返します。 –

答えて

7

gridView.getItemAtPosition(position)は、アダプタのgetItem(int position)シーンの下を呼び出します - ので、あなたが選択されているものを識別することができますSTHを返すために、あなたのImageAdapterクラスでgetItemを実装する(多分mobileValues[position]が十分であるか、単にあなたがテキストビューに書き込むもの: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(position) –

関連する問題