2012-05-26 1 views
6

데이터베이스에서 가져온 일부 데이터 (문자열)를 보여주기 위해 ListView를 사용했습니다 ... 아주 간단하지만 제 동료 중 한 명이 이미지를 화면의 텍스트 앞에 놓기로했습니다. 우리는 ListView로는 할 수 없었지만 우리가 GridView를 사용하여 약간의 시간을 보냈으며 텍스트 앞 부분에 이미지를 넣었던 GridView를 사용한 예제를 발견했습니다.) (ImageAdapter를 사용하여 Gridview에서 선택한 항목을 가져 오는 방법은 무엇입니까? (안드로이드)

이제

, 불행하게도 우리는 내가 OnItemClickListener를 사용하고

(선택한 항목에서 제공되는 텍스트를 기반으로) 선택한 항목을 얻을하는 방법을 알고하지 않으며, onItemClick 내 방법 gridView.getItemSelectedAtPosition ,하지만 내가 얻는 모든 것은 "null"입니다.

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에 소스는 어댑터의 getItem(int position) 현장에서

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) 호출 - (어쩌면 mobileValues[position] 그래서 당신은 선택되어 무엇을 식별 할 수 STH를 반환하도록 ImageAdapter 클래스에서 getItem를 구현 충분하거나 텍스트 뷰로 작성한 내용 : 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)을 통해 클래스 데이터를 가져 오는 방법. –