【发布时间】:2017-03-09 16:04:46
【问题描述】:
我目前有一个带有打开 DialogFragment 的 ImageButton 的片段。此 DialogFragment 是使用适配器的自定义列表,其中每个条目都有一个 ImageView 和 TextView。
是否可以将所选项目的ImageView的“src”返回给打开DialogFragment的Fragment?我需要把 ImageButton 的 src 改成选中的图片。
我的主要片段调用 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");
}
});
我的包含 ListView 的 DialogFragment 类:
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;
}
}
【问题讨论】:
-
就像
Fragment和DialogFragment可以通过托管Activity使用接口进行通信 - 创建一个接口并在您的Activity 中实现回调,然后在您的Activity 中通过以下方式找到片段它的id或tag并直接调用传递值的方法。还有其他方法,例如 RxJava,但是这是使用托管Activitys 在Fragments 之间进行通信的常用方法@
标签: android listview fragment onitemclicklistener dialogfragment