2016-12-23 3 views
4

프래그먼트에서 함수를 작성했습니다. 그리고 사용자 지정 어댑터에있는 단추를 클릭 할 때 해당 함수를 호출하고 싶지만 사용자 지정 어댑터에서 조각의 함수를 호출 할 수는 없습니다.사용자 정의 어댑터에서 프래그먼트 함수를 호출하는 방법

어댑터에 대한 내 코드 조각의 기능 버튼을 클릭하고 호출하는 것입니다

    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(); 


      } 
     }); 

조각에 내 기능

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(); 

     } 

이제

아래

내부 어댑터 클래스처럼 조각 클래스에서 구현 당신은 인터페이스 인스턴스를 어댑터 c에 전달하기 전에 아래처럼 어댑터 onclick 리스너에서 인터페이스 메소드를 호출해야합니다 onstructor

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

그런 다음 내부

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

처럼 조각에서 어댑터에

+0

모두에게 돌릴 줄을 –

+0

도움이된다면 제 대답을 수락하십시오. –

1

그 어댑터의 조각 클래스 이름과 기능. 조각의 어댑터를 호출하여 조각 같이 수행에

,

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. 
} 

도움이 되시길 바랍니다. 감사합니다. 도움이 될만한 정보가 있으면 알려주세요. 해피 코딩.

+0

이 시점에서 오류가 발생했습니다 this.fragment = fragment; –

+0

@MukeshMishra가 내 대답을 업데이트했습니다. 확인하고 투표하십시오. –

1

패스 조각 완료이

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


     } 
    }); 

및 사용 조각처럼 인터페이스 메서드를 호출 OnClickListener를 귀하의 어댑터와 같은 :

,210
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();

현재 조각에서 어댑터로 함수를 호출하는 것은 아닙니다.

어댑터의 값을 설정하려는 목록보기가 있다고 가정합니다.

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()); 
하여 사용자 정의 어댑터에서
SelectUserAdapter adapter = new SelectUserAdapter(selectUserModels, getActivity(), CurrentFragment.this); 
     listView.setAdapter(adapter); 

이 코드를 넣어 :이 경우,이 코드를 넣어 당신의 조각입니다
0

사용자 지정 어댑터의 부모 작업 클래스에보기 컨텍스트를 캐스트 한 다음 메서드를 호출하기 만하면됩니다. 단계 : 1. 사용자 정의 어댑터에서보기 컨텍스트를 가져 와서 상위 활동으로 캐스트하십시오. 2. Fragment 클래스에 컨텍스트를 캐스팅합니다. 3. object를 사용하여 fragment 메서드를 호출합니다.

참조 코드 -

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

는 조각을 다시 인스턴스화하지 마십시오.

관련 문제