7

カスタム ArrayAdapter から完全な listView があります。各ビューにはボタンがあります。ボタンがクリックされたときに現在のフラグメントを変更したい。これは私のコードです:

public class CheckInSArrayAdapter extends ArrayAdapter<JSONObject> {


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getViewOptimize(position, convertView, parent);
    }

    public View getViewOptimize(int position, View convertView, ViewGroup parent) {

    ......

        viewHolder.commentBtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

            ??? <<<<<

        });

        return convertView;
    }

    private class ViewHolder {
        ...       
        public Button commentBtn;
    }

}

だから今、私は OnClickListener から getFragmentManager を呼び出すことができません。どのようにできるのか?

4

2 に答える 2

25

わかりました、少し遅れているかもしれませんが、これを行うのに役立つ人もいるかもしれません.

アダプターを呼び出すクラスでは、「FragmentActivity」を拡張または実装する必要があります。次に、Activity に fragmentManager が含まれます。

Adapter を呼び出すときは、 FragmentActivity を拡張するクラスで呼び出します

MyAdapterName = new MyAdapterName(MyClassName.this, Objects);

次に、getView() のアダプターで-これを行います。

final Context context = parent.getContext();
FragmentManager fm = ((Activity) context).getFragmentManager();

良い Android FragmentManager を使用するように注意してください - android.app.FragmentManager は android.support.v4.app.FragmentManager ではありません。

于 2015-03-31T13:35:00.337 に答える
4

とても遅いですが、ここでは誰もこの質問に答えていません。

を使用して getview メソッドでフラグメントマネージャーを呼び出すことができます

FragmentManager fm = ((Activity)context).getFragmentManager(); 

getFragmentManager() は Activity クラスのメソッドです。

例えば

holder.tvBuy.setOnClickListener(new OnClickListener()
{

@Override
public void onClick(View v) 
{
    // TODO Auto-generated method stub
     Fragment fragment;
     fragment = new Buy();
    ((Activity)context).getFragmentManager().beginTransaction().replace(R.id.content_frame,fragment).commit();
}
}

ここでは、アクティビティをコンテキストとしてアダプターに渡す必要があります。

それが誰かを助けることを願っています....

于 2014-08-06T13:28:44.057 に答える