Reputation: 7210
This is my simple adapter:
public class MainAdapter extends BaseAdapter {
private Context mContext;
private Integer[] mText = {
R.string.main_team,
R.string.main_league,
R.string.main_economy,
R.string.main_arena,
R.string.main_staff,
R.string.main_team_up
};
public MainAdapter(Context c) {
mContext = c;
}
@Override
public int getCount() {
return mText.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Button buttonView;
if (convertView == null) { // if it's not recycled, initialize some attributes
buttonView = new Button(mContext);
buttonView.setLayoutParams(new GridView.LayoutParams(85, 45));
//imageView.setScaleType(Button.ScaleType.CENTER_CROP);
buttonView.setPadding(4, 4, 4, 4);
} else {
buttonView = (Button) convertView;
}
buttonView.setText(mText[position]);
return buttonView;
}
}
Every button has to start its own intent. I was thinking of using a switch case based on the position but it seems really "stupid" as solution.
Upvotes: 0
Views: 2218
Reputation: 27284
If you know, in your adapter the intent to fire and the data to put in it you can try something like that:
public class MainAdapter extends BaseAdapter implements OnClickListener {
private Context mContext;
private Activity mActivity;
private Integer[] mText = {
R.string.main_team,
R.string.main_league,
R.string.main_economy,
R.string.main_arena,
R.string.main_staff,
R.string.main_team_up
};
public MainAdapter(Context c,Activity a) {
mContext = c;
mActivity = a;
}
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Button buttonView;
if (convertView == null) { // if it's not recycled, initialize some attributes
buttonView = new Button(mContext);
buttonView.setLayoutParams(new GridView.LayoutParams(85, 45));
//imageView.setScaleType(Button.ScaleType.CENTER_CROP);
buttonView.setPadding(4, 4, 4, 4);
} else {
buttonView = (Button) convertView;
}
buttonView.setText(mText[position]);
// For exemple a String, but setTag takes an object
buttonView.setTag("dataToSendThrewTheIntent");
buttonView.setOnClickListener(this);
return buttonView;
}
@Override
public void onClick(View v) {
String dataToSendThrewTheIntent = (String) v.getTag();
Intent i = new Intent(mContext, DestinationActivity.class);
i.putExtra("key", dataToSendThrewTheIntent);
mActivity.startActivity(i);
}
}
This method avoids multiple onClick listeners.
Upvotes: 0
Reputation: 24667
I would create a new object, eg. ActivityLaunchButtonData
to store the button Text and the button Intent.
Then I would have an array of ActivityLaunchButtonData objects.
Then in the getView
method I'd have something like:
ActivityLaunchButtonData activityLaunchButtonData = activityLaunchButtonDataArray[position];
buttonView.setText(activityLaunchButtonData.getText());
buttonView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = activityLaunchButtonData.getIntent();
startActivity(intent);
}
});
Upvotes: 1