2016-12-23 9 views
4

フラグメント内に関数を作成しました。私は、カスタムアダプタにあるボタンがクリックされたときにその関数を呼び出すが、カスタムアダプタからフラグメントの関数を呼び出すことはできない。カスタムアダプタからフラグメントの関数を呼び出す方法

アダプタの私のコードは、ボタンをクリックして、あなたはあなたの関数は、静的およびコールすることができますフラグメントに

public class NewPageActivity extends Fragment{ 
     public void SendOrder(String OrderId) 
{ 

    final String serverid = sp.getString("serverid", "null"); 
    Log.e("TAG", "SendOrder: "+serverid +OrderId); 
    new SendOrder().execute(new Config().addNewOrder, serverid, OrderId); 
} 
     } 
+0

アダプタは 'NewPageActivity'や他のクラスで使われていますか? –

+0

NewPageActivityで使用されています –

+0

@MukeshMishraなぜインタフェースを使用できませんか? – Sridhar

答えて

9

最後に以下

public class YourFragment implements CallBack{ 
    ........... 
    @Override 
    public void yourMethodName(){ 
     //"here call your fragment method or do any bussiness logic 
     }  
    } 

のようなあなたのインターフェイスメソッドを実装するアダプタでインターフェイスクラスを作成し、フラグメントのクラスに

  public Interface CallBack{ 
     void yourMethodName(); 

     } 

以下

インサイドアダプタクラスのようなあなたのフラグメントのクラスで実装以下のようにアダプタのonclickリスナでインタフェースメソッドを呼び出す必要があります。その前に、インタフェースインスタンスをアダプタcに渡す必要がありますその後onstructor

public class YourAdapterClass extends BaseAdapter { 
    private CallBack mCallBack; 
    public YourAdapterClass (CallBack callback){ 
    mCallBack = callback; 
     } 
    } 

あなた

UserAdapter adapter = new UserAdapter(selectUserModels, getActivity(), FragmentName.this); 

とフラグメントの使用のようなフラグメントからあなたのアダプタで

+0

すべての人にtanxを完了 –

+0

助けてくれれば私の答えを受け入れてください –

1

ある

    viewHolder.accept.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       removeListItem(viewHolder.order_card_layout, position); 

       android.support.v4.app.Fragment newFragment = new NewPageActivity(); 
       android.support.v4.app.FragmentTransaction ft = ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction(); 

       ft.sendorder(data.getorder_id()); 
       ft.add(R.id.framelay, newFragment).commit(); 


      } 
     }); 

My機能フラグメントの関数を呼び出すことですアダプタのフラグメントクラス名で機能します。あなたのフラグメントで

次のように行い、

public static void SendOrder(String OrderId) 
{ 

    final String serverid = sp.getString("serverid", "null"); 
    Log.e("TAG", "SendOrder: "+serverid +OrderId); 
    new SendOrder().execute(new Config().addNewOrder, serverid, OrderId); 
} 

あなたの内側のフラグメント、フラグメントでアダプタを呼び出す

viewHolder.accept.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       removeListItem(viewHolder.order_card_layout, position); 

       fragmentClassName.Sendorder(data.getorder_id()); 

      } 
     }); 
1

autoWitDrawRuleListAdapter = new AutoWithRuleListListAdapter(getContext(), AutoViewRuleFragment.this, lookupData); 
       recycleRuleList.setAdapter(autoWitDrawRuleListAdapter); 

コンストラクタ: - フラグメントのクラスで

private Context context; 
private Fragment fragment; 
private ArrayList<ObjGetLookupDataResponseIn> lookupData; 

public AutoWithRuleListListAdapter(Context context, Fragment fragment, ArrayList<ObjGetLookupDataResponseIn> lookupData) { 
    this.context = context; 
    this.fragment = fragment; 
    this.lookupData = lookupData; 

} 

@Override 
public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) { 
    String output = lookupData.get(position).getDisplayName().substring(0, 1).toUpperCase() + lookupData.get(position).getDisplayName().substring(1); 
    holder.radioBen.setText(output); 
    holder.radioBen.setOnCheckedChangeListener(null); 
    holder.radioBen.setChecked(lookupData.get(position).isSelected()); 

    holder.radioBen.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      resetAll(); 
      lookupData.get(position).setSelected(true); 
      notifyDataSetChanged(); 
      ((AutoViewRuleFragment)fragment).ruleName(position); 
     } 
    }); 


} 

方法。

public void ruleName(int position) { 
    //your logic. 
} 

希望があれば、このhelp.Voteを参考にしてください。ハッピーコーディング。

+0

この時点でエラーが発生しています this.fragment = fragment; –

+0

@MukeshMishraが私の答えを更新しました。チェックして投票してください。 –

1

パスフラグメントを完了この

@Override 
     public void onClick(View v) { 
      mCallBack.yourMethodName(); 


     } 
    }); 

のようなあなたのインターフェイスメソッドを呼び出すonClickListener内部あなたのアダプタのように:

private Context context; 
      private Fragment fragment; 

    public UserAdapter(List<UserModel> selectUserModels, Context context, Fragment fragment) { 
      contactList = selectUserModels; 
      this.context = context; 
      this.fragment = fragment; 
     } 

、あなたは新しいを使用して、現在の断片のオブジェクトを作成した断片の機能を呼び出すために、あなたのコードでは

((FragmentName) fragment).fragmentMethod(); 
0

のようなメソッドを呼び出します。

android.support.v4.app.Fragment newFragment = new NewPageActivity();

ファンクションをフラグメントからアダプタに呼び出す方法は現在ありません。

アダプタから値を設定するリストビューがあるとします。その場合には、このコードを置くことはあなたのフラグメントである:

SelectUserAdapter adapter = new SelectUserAdapter(selectUserModels, getActivity(), CurrentFragment.this); 
     listView.setAdapter(adapter); 

カスタムアダプターは、このコードを入れて:

public class SelectUserAdapter extends BaseAdapter { 

    private List<SelectUserModel> contactList; 
    private Context context; 
    private Fragment fragment; 

    public SelectUserAdapter(List<SelectUserModel> selectUserModels, Context context, Fragment fragment) { 
     contactList = selectUserModels; 
     this.context = context; 
     this.fragment = fragment; 
    } 

を次にアダプタでこのコードを使用する断片のメソッドを呼び出すために:

((CurrentFragment) fragment).sendorder(data.getorder_id()); 
0

カスタムアダプターのParent Activityクラスにビューコンテキストをキャストして、単にメソッドを呼び出します。手順: 1.カスタムアダプターでビューコンテキストを取得し、親アクティビティーにキャストします。 2.コンテキストをFragmentクラスにキャストします。 3.オブジェクトを使用してフラグメントメソッドを呼び出します。

リファレンスコード -

MainActivity hf = (MainActivity) view.getContext(); 
      FragmentManager manager = hf.getSupportFragmentManager(); 
      HomeFragment fragment = (HomeFragment) manager.findFragmentByTag("HomeFragment"); 
      fragment.loadJSON(true); 

は再びフラグメントをインスタンス化しないでください。

関連する問題