2014-04-10 9 views
0

Я пытаюсь получить URL-адрес изображения из выбранного изображения, которое пользователь выбирает, чтобы затем передать эту строку/URL другому фрагменту, который я настроил, чтобы изображение могло быть полностью просмотрев изображение.Получение и передача URL-адреса изображения с помощью Picasso

Как бы я смог достичь этого? Благодарю.

Вот класс SampleGridViewAdapter:

inal class SampleGridViewAdapter extends BaseAdapter { 
private final Context context; 
public final List<String> urls = new ArrayList<String>(); 

public SampleGridViewAdapter(Context context) { 
    this.context = context; 

    // Ensure we get a different ordering of images on each run. 
    Collections.addAll(urls, Data.URLS); 
    Collections.shuffle(urls); 



} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    SquaredImageView view = (SquaredImageView) convertView; 
    if (view == null) { 
     view = new SquaredImageView(context); 
     view.setScaleType(CENTER_CROP); 
    } 

    // Get the image URL for the current position. 
    String url = getItem(position); 

    // Trigger the download of the URL asynchronously into the image view. 
    Picasso.with(context) // 
      .load(url) // 
      .placeholder(R.drawable.placeholder) // 
      .error(R.drawable.error) // 
      .fit() // 
      .into(view); 

    return view; 
} 

@Override 
public int getCount() { 
    return urls.size(); 
} 

@Override 
public String getItem(int position) { 
    return urls.get(position); 
} 

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

Вот мой SampleGridViewActivity:

public class SampleGridViewActivity extends SherlockFragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.sample_gridview_activity, 
      container, false); 

    GridView Grid = (GridView) view.findViewById(R.id.grid_view); 
    Grid.setAdapter(new SampleGridViewAdapter(getActivity())); 

    Grid.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long urls) { 
      // TODO Auto-generated method stub 

      FragmentManager fm = getFragmentManager(); 
      FragmentTransaction transaction = fm.beginTransaction(); 

      Fragment openImage = new ImageViewPager(); 

      transaction.replace(R.id.content_frame, openImage); 

      transaction.addToBackStack(null); 

      transaction.commit(); 

     } 
    }); 

    return view; 

} 

} 

Вот класс, я хотел бы, чтобы отправить строку:

public class ImageViewer extends SherlockFragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.imageviewpager, container, false); 

    ImageView IMGView = (ImageView) view.findViewById(R.id.imageView1); 

    Picasso.with(getActivity()).load("Pass URL into HERE").into(IMGView); 

    return view; 
} 

} 

ответ

1

Вы должен использовать функцию ArgumentFragments.

При создании Fragment, вы можете передать URL как аргумент

Fragment openImage = new ImageViewPager(); 
Bundle b = new Bundle(); 
b.putString("url", DATA.URLs.get(position)); 
openImage.setArguments(b); 
transaction.replace(R.id.content_frame, openImage); 

И тогда, когда ваш Fragment надувается вы можете получить этот аргумент строку

Picasso.with(getActivity()).load(getArguments().getString("url")).into(IMGView); 
+0

Я получаю сообщение об ошибке на «DATA», он не может быть разрешен переменной. hmm – Jack

+0

Что вы подразумеваете под DATA? – Jack

+0

Вы написали DATA.URLs в своем классе адаптера. Сначала вы должны иметь доступ к своему списку. Я написал DATA, потому что вы написали DATA в своем адаптере. Я думаю, вы также можете использовать свой адаптер. Поместите ваш адаптер в переменную mAdapter. А затем вы можете получить доступ к своему списку, например, mAdapter.urls.get (позиция) – tasomaniac