I have two fragments, one with listview of objects and other for object details. Listview is populated by BaseAdapter and I`m trying to switch to other fragment (object details) from listview onclick. The code that I have worked fine before with activities:
public class MyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;
ArrayList<HashMap<String, String>> mDataShown;
ArrayList<HashMap<String, String>> mAllData;
public MyAdapter(Activity actt, ArrayList<HashMap<String, String>> d) {
activity = actt;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(activity.getApplicationContext());
mDataShown= (ArrayList<HashMap<String, String>>) d;
mAllData = (ArrayList<HashMap<String, String>>) mDataShown.clone();
}
public int getCount() {
return mDataShown.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.songs_row, null);
TextView tvsong = (TextView)vi.findViewById(R.id.tvSong);
TextView tvsinger = (TextView)vi.findViewById(R.id.tvSinger);
HashMap<String, String> song = new HashMap<String, String>();
song = data.get(position);
final Context ct;
ct = vi.getContext();
final String stsong = song.get(Songs.KEY_NAME);
final String stsinger = song.get(Songs.KEY_SINGER);
tvsong.setText(stsong);
tvsinger.setText(stsinger);
vi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(ct, SongDetails.class);
Bundle bandl = new Bundle();
bandl.putString("song", stsong);
bandl.putString("singer", stsinger);
i.putExtras(bandl);
ct.startActivity(i);
}
});
return vi;
}
But now I changed activities with fragments and I need to replace fragment instead starting activity. Tried with this code
vi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Fragment SongDetailsFragment = SongDetails.newInstance();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.SongContainer, SongDetailsFragment);
transaction.commit();
}
});
but it wont work. Does anyone have an idea how to use FragmentTransaction from BaseAdapter?