[英]Call a Fragment method from an Adapter
我的片段中有一个方法sendData()
。 此方法启动一个新的Activity。 我想从我的ArrayAdapter
调用此方法。
这是我的代码: -
HomeFragment.java
stagAdaper = new StaggeredAdapter(myContext, android.R.layout.simple_list_item_1, getList);
mGridView.setAdapter(stagAdaper);
private void sendData(int position)
{
myDialog = new ProgressDialog(myContext).show(getActivity(), "Fetching news..", "Just a moment");
myDialog.getWindow().setContentView(R.layout.openarticlewaitprogress);
myDialog.getWindow().setTitle("Loading..");
myDialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
new NewsDetails(myDialog);
Intent nIntent = new Intent(getActivity(),Details.class);
String Body=getList.get(position).getBody();
newsIntent.putExtra("Body", Body);
startActivity(nIntent);
}
StaggeredAdapter.java
viewHolder.layGridLayout.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
//viewHolder.layGridLayout.setForeground(R.drawable.foreground_selector);
}
});
return convertView;
}
我该怎么做?
编辑:这是我现在要用的。 下面提供了更老,更“简单”的解决方案。
MyFragment extends Fragment implements CustomAdapter.EventListener {
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
CustomAdapter adapter = new CustomAdapter(..., this);
}
void onEvent(int data) {
doSomething(data);
}
}
CustomAdapter extends BaseAdapter {
EventListener listener;
public interface EventListener {
void onEvent(int data);
}
public CustomAdapter(..., EventListener listener) {
this.listener = listener;
}
...
}
现在从适配器的任何地方我们都可以调用listener.onEvent(data);
触发片段中的方法。
此外,我们可以在适配器中添加另一个方法,例如registerListener(EventListener eventListener)
,然后在需要时维护一个监听器列表,而不是通过构造函数提供监听器。
旧答案:
解决方案1:使适配器成为片段的内部类,以便您可以直接调用该方法。
解决方案2:更新适配器构造函数以接受Fragment作为参数。
就像是 :
customAdapter = new CustomAdapter(myContext, android.R.layout.simple_list_item_1, getList, HomeFragment.this);
并更新适配器的构造函数:
public CustomAdapter(Context context, int id, HomeFragment fragment) {
this.fragment = fragment;
}
然后使用fragment变量调用方法。
fragment.doSomething();
我知道现在回答已经很晚了,但还有两种方法可以做到:
您也可以从adapter
发送broadcast
并将其注册为fragment
。
使用界面。 有关详细信息,请参阅此问题。
您可以将sendData方法设置为静态
public static void sendData(int position)
{
......
}
n称之为
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
HomeFragment.sendData(position)
........
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.