2016-07-26 21 views
0

Ich möchte Bildquelle wie id oder irgendeinen Namen zum Bild setzen, die dynamisch erzeugt werden, aber ich bin nicht in der Lage, das zu tun. Hier ist mein Code:Wie man Bildressource in ImageAdapter einstellt und die Ressource auf Klicklistener bekommt

public class ImageAdapter extends BaseAdapter { 
    public Context mContext; 
    public String id ; 
    public String [] arr; 
    public String[] mThumbIds; 

    public ImageAdapter(Context c,String id) { 
     mContext = c; 
     this.id = id; 
     arr = this.id.split(","); 
     populateArray(); 
    } 

    public void populateArray(){ 
     mThumbIds = new String[arr.length]; 
     for(int i= 0; i<arr.length; i++){ 
      mThumbIds[i] = "http://www.mysiteurl.com?r=index.php"+arr[i]; 
     } 

    } 

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

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

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

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 

     } else { 
      imageView = (ImageView) convertView; 
     } 
     Picasso.with(mContext).load(mThumbIds[position]).into(imageView); 
     //imageView.setImageResource(Integer.parseInt(mThumbIds[position])); 
     return imageView; 
    } 
} 

Ich habe ein Array von IDs, die ich in Konstruktor dieser Klasse übergeben. Ich möchte diese IDs auf meine Bilder setzen, die von diesem Code erzeugt werden, damit ich diese ID auf einen dieser Bild-Klick-Listener bekommen kann.

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
     // if it's not recycled, initialize some attributes 
     imageView = new ImageView(mContext); 
     imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(8, 8, 8, 8); 

    } else { 
     imageView = (ImageView) convertView; 
    } 
    Picasso.with(mContext).load(mThumbIds[position]).into(imageView); 
    //imageView.setImageResource(Integer.parseInt(mThumbIds[position])); 
    return imageView; 
} 

Hier ist mein Fragment aus dem ich die ImageAdapter Klasse bin Aufruf und den Klick-Listener der Bilder einstellen.

GridView gridview = (GridView) view.findViewById(R.id.gridview); 
gridview.setAdapter(new ImageAdapter(getActivity(),id)); 

gridview.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View v, 
          int position, long id) { 
     ChartPageFragment.fromSearch = true; 

     ChartPageFragment newFragment = new ChartPageFragment(); 
     Bundle args = new Bundle(); 
     //String arr=v.getTag(); 
     args.putString("id","34778"); 
     newFragment.setArguments(args); 

     FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); 

     // Replace whatever is in the fragment_container view with this fragment, 
     // and add the transaction to the back stack so the user can navigate back 
     transaction.replace(R.id.fragment_container, newFragment); 
     transaction.addToBackStack(newFragment.getClass().getName()); 
     // Commit the transaction 
     transaction.commit(); 
    } 
}); 

Ich bin auf dieser Idee fest, wie man das macht. Vielen Dank im Voraus

Antwort

1

Verwenden Sie die gleiche Logik, die Sie im Adapter verwenden. Teilen Sie die Zeichenfolge id und nehmen Sie die entsprechende ID mit position Argument in onItemClick der GridView.

die Sie interessieren,

private String getClickedItemId(int position){ 
    // id is the variable containing all your ids 
    String [] arr = id.split(","); 
    if(position < arr.length) 
     return arr[poistion]; 
    else 
     return null; 
} 

Rufen Sie diese Funktion in Ihrem onItemClick wie folgt.

@Override 
public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    ChartPageFragment.fromSearch = true; 

    ChartPageFragment newFragment = new ChartPageFragment(); 
    Bundle args = new Bundle(); 
    args.putString("id", getClickedItemId(position)); 
    newFragment.setArguments(args); 

    ... 
} 
+1

Danke Kumpel ... es funktioniert .... –