从适配器调用Fragment方法

sendData()我的片段中有一个方法。此方法启动一个新的活动。我想从我的调用此方法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);

并更新Adapter的构造函数:

public CustomAdapter(Context context, int id, HomeFragment fragment) {

this.fragment = fragment;

}

然后您可以使用fragment变量调用方法。

fragment.doSomething();

以上是 从适配器调用Fragment方法 的全部内容, 来源链接: utcz.com/qa/424071.html

回到顶部