如何在我的 ListViewAdapter 和我的 Fragment 之间发送一个变量。

How can I send a variable between my ListViewAdapter to my Fragment.

我的片段(称为 "buy")中有一个列表视图。所以我当然有一个适配器。问题是我的适配器中有一个数学过程,我需要将结果发送到我的 txtview。但不幸的是,我的文本视图在我的片段中。那么我怎样才能发送这个变量呢?有些像

((FragmentBuy) Fragment).send(prize);

但这当然行不通。感谢您的帮助!

我有一个 MainActivity

public class MainActiviry extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tabs);


        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText("Buy"));
        tabLayout.addTab(tabLayout.newTab().setText("Sell"));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final PagerAdapter adapter = new PagerAdapter
                (getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }

当然还有我的寻呼机

        public class PagerAdapter extends FragmentStatePagerAdapter {
        int mNumOfTabs;
        public PagerAdapter(FragmentManager fm, int NumOfTabs) {
            super(fm);
            this.mNumOfTabs = NumOfTabs;
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    FragmentCompras tab1 = new FragmentBuy();
                    return tab1;
                case 1:
                    FragmentDespensa tab2 = new FragmentSell();
                    return tab2;
                default:
                    return null;
            }
        }

        @Override
        public int getCount() {
            return mNumOfTabs;
        }
    }

我的适配器

    public class ListViewAdapter extends BaseAdapter{

public ArrayList<HashMap<String, String>> list;

Activity activity;
int contador = 0;
public ListViewAdapter(Activity activity, ArrayList<HashMap<String, String>> list){
    super();
    this.activity = activity;
    this.list = list;

}
@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return list.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}
private class ViewHolder {
TextView name;
TextView marc, cant, prec;}

@Override

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

    final ViewHolder holder;
    LayoutInflater inflater = activity.getLayoutInflater();
    if (convertView == null){
        convertView = inflater.inflate(R.layout.list_colum, null);
        holder = new ViewHolder();

        holder.name = (TextView) convertView.findViewById(R.id.name);
        holder.marc = (TextView) convertView.findViewById(R.id.marc);
        holder.cant = (TextView) convertView.findViewById(R.id.cant);
        holder.prec = (TextView) convertView.findViewById(R.id.prec);
        convertView.setTag(holder);
    }
    else{

        holder=(ViewHolder) convertView.getTag();

    }

    HashMap<String, String> map = list.get(position);
    holder.name.setText(map.get(FIRST_COLUMN));
    holder.marc.setText(map.get(SECOND_COLUMN));
    holder.prec.setText(map.get(THIRD_COLUMN));
    holder.cant.setText(map.get(FOURTH_COLUMN));



    return convertView;

}

还有我的片段

public class FragmentBuy extends android.support.v4.app.Fragment implements View.OnClickListener{
    private ArrayList<HashMap<String, String>> list;
    //HashMap<String, String> temp = new HashMap<String, String>();
    private Button scanBtn;
    static boolean guardar;
    private TextView txttotal, formatTxt, contentTxt, lblmx, textView, cantidadproducto;
    ListView listView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activy_micompra, container, false);
        final DbHelper admin = new DbHelper(view.getContext(), null);
        list = new ArrayList<HashMap<String, String>>();
        setHasOptionsMenu(true);
        guardar = false;

        txttotal = (TextView)view.findViewById(R.id.total); //this is my textview
        textView = (TextView) view.findViewById(R.id.mxcompra);
        cantidadproducto = (TextView)view.findViewById(R.id.cantidadproducto);
        return view;
    }

因此,一种直接的方法是直接在 Activity 中为数学计算创建一个变量。所以这里是步骤:

  1. 创建一个接口回调,将数据从 ListAdapter
  2. 发送到您的 activity
  3. 为您的片段创建实例变量,在您的 MainActivity
  4. 中保存 public 方法 send(prize)
  5. 在接口的回调中通过fragmentBuy.send(奖品)直接从activity调用你的方法

您可以使用事件总线从适配器返回到片段 class.It 简化了之间的通信 components.It 与活动、片段和后台的通信也表现良好 threads.For 简单的通信您可以使用 Otto Event Bus 进行处理..

更多详情,你可以去这里.. Otto event bus

您可以使用接口在 Listview 适配器和 Fragment 之间进行通信。

步骤:

1.Create 带有发送方法的接口。 2.Implement 你片段中的那个方法。 3. 在创建适配器时传递接口的引用(即接口实现 class.. 这是当前片段。) 4) 在适配器中使用该接口对象调用发送方法。