フラグメントに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:フラグメントをパラメーターとして受け入れるようにアダプターコンストラクターを更新します。
何かのようなもの :
_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.doSomething();
_
私は答えるのが遅いことを知っていますが、それを行うには2つの方法があります:
broadcast
からadapter
を送信して、fragment
に登録することもできます。
インターフェイスを使用します。 this SOの質問を参照してください。