Reputation: 471
I currently have a Fragment with an ImageButton that open up a DialogFragment. This DialogFragment is a custom list using an adapter where each entry has an ImageView and TextView.
Is it possible to return the "src" of the ImageView of the selected item to the Fragment that opened the DialogFragment? I need to change the src of the ImageButton to the selected image.
My main Fragment calling the DialogFragment:
ImageButton starter = (ImageButton) myView.findViewById(R.id.imageStarterItem);
starter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//Here
ItemPhysStarterFragment dialog = ItemPhysStarterFragment.newInstance();
dialog.show(getFragmentManager(), "fragmentDialog");
}
});
My DialogFragment class containing the ListView:
public class ItemPhysStarterFragment extends DialogFragment {
Button btn;
ListView lv;
SearchView sv;
ArrayAdapter<String> adapter;
String[] names={"Bumba's Mask", "Rangda's Mask", "Bluestone Pendant", "Death's Toll",
"Mark of the Vanguard", "Swift Wing", "War Flag", "Watcher's Gift"};
int[] images={R.drawable.bumbas_mask, R.drawable.rangdas_mask, R.drawable.bluestone_pendant, R.drawable.deaths_toll,
R.drawable.mark_of_the_vanguard, R.drawable.swift_wing, R.drawable.war_flag, R.drawable.watchers_gift};
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myView=inflater.inflate(R.layout.item_list, null);
//SET TITLE DIALOG TITLE
getDialog().setTitle("Starter Items");
//BUTTON,LISTVIEW,SEARCHVIEW INITIALIZATIONS
lv=(ListView) myView.findViewById(R.id.listView1);
sv=(SearchView) myView.findViewById(R.id.searchView1);
btn=(Button) myView.findViewById(R.id.dismiss);
//CREATE AND SET ADAPTER TO LISTVIEW
final Adapter adapter = new Adapter(getActivity(), this.getItems());
lv.setAdapter(adapter);
//SEARCH
sv.setQueryHint("Search starter items..");
sv.setOnQueryTextListener(new OnQueryTextListener() {
public boolean onQueryTextSubmit(String txt) {
return false;
}
public boolean onQueryTextChange(String txt) {
adapter.getFilter().filter(txt);
return false;
}
});
//BUTTON
btn.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
dismiss();
}
});
return myView;
}
public static ItemPhysStarterFragment newInstance(){
ItemPhysStarterFragment f = new ItemPhysStarterFragment();
return f;
}
private ArrayList<Item> getItems() {
ArrayList<Item> items = new ArrayList<Item>();
Item item;
for(int i = 0; i < names.length; i++)
{
item = new Item(names[i], images[i]);
items.add(item);
}
return items;
}
}
Upvotes: 2
Views: 2009
Reputation: 3332
This link was helpful to me in achieving the same result as proposed by @Wizzard.
It is basically proposing the same solution, except there is not need to create a custom interface.
In your fragment class
create a variable and setter method to accept OnItemClickListener
private android.widget.AdapterView.OnItemClickListener onItemClickListener;
public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
In the fragement class
make sure the listView
sets the item click listener:
list.setOnItemClickListener(onItemClickListener);
Finally in you main class
you can call the listviewItemClickListener
:
DialogMyListFragment df = new DialogMyListFragment().getInstance();
df.setOnItemClickListener(listener);
Upvotes: 1
Reputation: 6857
Create an interface first
public interface OnListItemClickedListener {
void onListItemClick(int resourceId);
}
Create setter for interface
public class ItemPhysStarterFragment extends DialogFragment {
OnListItemClickedListener mListener;
public void setOnListItemSelectedListener(OnListItemClickedListener listener) {
this.mListener = listener;
}
}
Now set Listener to your fragment
ItemPhysStarterFragment dialog = ItemPhysStarterFragment.newInstance();
dialog.setOnListItemSelectedListener(new OnListItemClickedListener() {
@Override
public void onListItemClick(int resourceId) {
// User your resourceId
}
});
dialog.show(getFragmentManager(), "fragmentDialog");
Final step, trigger listener in your ItemPhysStarterFragment
fragment's ListItemClick() -
...public void onListItemClick(int resourceId) {
mListener.onListItemClick(pass your resource id);
}
Upvotes: 4
Reputation: 342
You can declare an interface
public interface OnCustomItemClickListener {
void onItemClicked(final String src);
}
and implement that interface when creating your dialog
(...),new OnCustomItemClickListener() {
@Override
public void onItemClicked() {
//do something
}
}, (...)
and handle it appropriately on your ItemPhysStarterFragment class
Upvotes: 0