Reputation: 540
I am working on an application that have to have a GridView
in the main activity containing images.
When an image is clicked, it has to open in another Activity
in a bigger size. In this Activity
, a ViewPager
has to be implemented so that I can swipe right and left to change between the images.
The problem is that when i click on an image, the first image of the images appear firstly (argentina flag) and then the viewpager works .. how can i make it start by the image that i clicked ?
This is my main activity code :
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
public class MainActivityPager extends ActionBarActivity
{
static int[] FLAG;
ViewPager viewPager;
PagerAdapter adapter;
GridView gridview;
int count;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity_pager);
FLAG = new int[] { R.drawable.flag_of_argentina, R.drawable.flag_of_brazil,
R.drawable.flag_of_england, R.drawable.flag_of_france,
R.drawable.flag_of_germany, R.drawable.flag_of_italy, R.drawable.flag_of_spain,
R.drawable.flag_of_uruguay };
AdapterGrid adapter = new AdapterGrid(MainActivityPager.this, FLAG);
gridview = (GridView) findViewById(R.id.gridView1);
gridview.setAdapter(adapter);
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
Intent intent = new Intent(view.getContext(), ActivityImage.class);
intent.putExtra("position", position);
count = gridview.getCount();
intent.putExtra("count", count);
startActivity(intent);
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
This is my AdapterGrid class code :
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
public class AdapterGrid extends BaseAdapter
{
private int[] mFlag;
private Context mContext;
public AdapterGrid(Context context, int[] flag) {
//super(context, flag);
mContext = context;
mFlag = flag;
}
@Override
public int getCount() {
return mFlag.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View grid;
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
{
grid = new View(mContext);
grid = inflater.inflate(R.layout.grid_single, null);
ImageView imageView = (ImageView)grid.findViewById(R.id.grid_image);
imageView.setImageResource(mFlag[position]);
} else {
grid = (View) convertView;
}
return grid;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}
This is my ActivityImage code :
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
public class ActivityImage extends FragmentActivity
{
private static int COUNT;
MyAdapter mAdapter;
ViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
Intent intent = getIntent();
COUNT = intent.getExtras().getInt("count");
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public int getCount() {
return COUNT;
}
@Override
public Fragment getItem(int position) {
return FragmentImage.init(position);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_image, menu);
return true;
}
}
This is my FragmentImage class code :
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class FragmentImage extends Fragment {
int fragVal;
static FragmentImage init(int pos) {
FragmentImage frag = new FragmentImage();
Bundle args = new Bundle();
args.putInt("val", pos);
frag.setArguments(args);
return frag;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragVal = getArguments() != null ? getArguments().getInt("val") : 1;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View layoutView = inflater.inflate(R.layout.fragment_image, container,
false);
ImageView imageView = (ImageView) layoutView.findViewById(R.id.imageView1);
imageView.setImageResource(MainActivityPager.FLAG[fragVal]);
return layoutView;
}
}
Thanks.
Upvotes: 0
Views: 939
Reputation: 5540
You set the position intent.putExtra("position", position); but never use it.
get it and
set after
mPager.setAdapter(mAdapter);
mPager.setCurrentItem(CurrentPosition);
Upvotes: 3