如何从自定义适配器调用片段函数
How to call a function of fragment from custom adapter
我在片段中创建了一个函数。我想在单击自定义适配器中的按钮时调用该函数,但我无法从自定义适配器调用片段函数。
我的适配器代码是单击一个按钮并调用片段的函数
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);
}
}
您可以将您的函数设为静态并在您的适配器中使用片段 class 名称调用该函数。
在你的片段中这样做,
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());
}
});
正在片段中调用适配器。
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);
}
});
}
片段中的方法class。
public void ruleName(int position) {
//your logic.
}
希望这个 help.Vote 如果你找到它 useful.Happy 编码。
在适配器中创建一个接口 Class 并在您的片段 class 中实现,如下所示
内部适配器class
public Interface CallBack{
void yourMethodName();
}
现在在片段 class 中实现如下所示的接口方法
public class YourFragment implements CallBack{
...........
@Override
public void yourMethodName(){
//"here call your fragment method or do any bussiness logic
}
}
最后,在将接口实例传递给适配器构造函数之前,您应该像下面这样在适配器 onclick 侦听器中调用接口方法
public class YourAdapterClass extends BaseAdapter {
private CallBack mCallBack;
public YourAdapterClass (CallBack callback){
mCallBack = callback;
}
}
然后在你的 onClickListener 中像这样调用你的接口方法
@Override
public void onClick(View v) {
mCallBack.yourMethodName();
}
});
完成
从
之类的片段传递适配器中的片段
UserAdapter adapter = new UserAdapter(selectUserModels, getActivity(), FragmentName.this);
并在您的适配器中使用该片段,例如:
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();
在调用 Fragment 函数的代码中,您使用 new 创建了当前 Fragment 的对象。
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;
}
然后在适配器中调用 Fragment 的方法使用此代码:
((CurrentFragment) fragment).sendorder(data.getorder_id());
在自定义适配器中将视图上下文投射到您的父级 Activity class,然后简单地调用您的方法。脚步:
1. 在自定义适配器中获取视图上下文并转换为父级 activity。
2. 将上下文投射到 Fragment class。
3.使用对象调用片段方法。
参考代码 -
MainActivity hf = (MainActivity) view.getContext();
FragmentManager manager = hf.getSupportFragmentManager();
HomeFragment fragment = (HomeFragment) manager.findFragmentByTag("HomeFragment");
fragment.loadJSON(true);
不要再次实例化 Fragment。
我在片段中创建了一个函数。我想在单击自定义适配器中的按钮时调用该函数,但我无法从自定义适配器调用片段函数。
我的适配器代码是单击一个按钮并调用片段的函数
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);
}
}
您可以将您的函数设为静态并在您的适配器中使用片段 class 名称调用该函数。
在你的片段中这样做,
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());
}
});
正在片段中调用适配器。
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);
}
});
}
片段中的方法class。
public void ruleName(int position) {
//your logic.
}
希望这个 help.Vote 如果你找到它 useful.Happy 编码。
在适配器中创建一个接口 Class 并在您的片段 class 中实现,如下所示
内部适配器class
public Interface CallBack{
void yourMethodName();
}
现在在片段 class 中实现如下所示的接口方法
public class YourFragment implements CallBack{
...........
@Override
public void yourMethodName(){
//"here call your fragment method or do any bussiness logic
}
}
最后,在将接口实例传递给适配器构造函数之前,您应该像下面这样在适配器 onclick 侦听器中调用接口方法
public class YourAdapterClass extends BaseAdapter {
private CallBack mCallBack;
public YourAdapterClass (CallBack callback){
mCallBack = callback;
}
}
然后在你的 onClickListener 中像这样调用你的接口方法
@Override
public void onClick(View v) {
mCallBack.yourMethodName();
}
});
完成
从
之类的片段传递适配器中的片段UserAdapter adapter = new UserAdapter(selectUserModels, getActivity(), FragmentName.this);
并在您的适配器中使用该片段,例如:
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();
在调用 Fragment 函数的代码中,您使用 new 创建了当前 Fragment 的对象。
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;
}
然后在适配器中调用 Fragment 的方法使用此代码:
((CurrentFragment) fragment).sendorder(data.getorder_id());
在自定义适配器中将视图上下文投射到您的父级 Activity class,然后简单地调用您的方法。脚步: 1. 在自定义适配器中获取视图上下文并转换为父级 activity。 2. 将上下文投射到 Fragment class。 3.使用对象调用片段方法。
参考代码 -
MainActivity hf = (MainActivity) view.getContext();
FragmentManager manager = hf.getSupportFragmentManager();
HomeFragment fragment = (HomeFragment) manager.findFragmentByTag("HomeFragment");
fragment.loadJSON(true);
不要再次实例化 Fragment。