2016-07-21 1 views
1

У меня есть в моем фрагменте (называется «купить») список. Так что, конечно, у меня есть адаптер. Проблема в том, что у меня есть математический процесс в моем адаптере, и мне нужен результат, который будет отправлен на мой txtview. Но, к сожалению, мой текст в моем фрагменте. Итак, как я могу отправить эту переменную? некоторые какКак я могу отправить переменную между моим списком ListViewAdapter в свой фрагмент.

((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; 
    } 
+0

следуйте http://stackoverflow.com/a/37535113/5381331 для отправки данных из 'ListViewApdapter' обратно в' Fragment' –

+0

Итак, вы хотите сказать, что хотите отправить общую сумму из своего списка, который находится в фрагменте A в TextView в фрагменте B правильно? и оба находятся в ViewPager –

+0

Я хочу отправить переменную из моего listviewadapter в мой фрагмент A (отправить на мой txttotal на мой фрагмент, называемый buy) –

ответ

0

Таким образом, прямой подход будет создавать переменную для вычисления математики непосредственно в вашей деятельности. Так вот шаги:

  1. Создание интерфейса обратного вызова, который передает данные в вашей деятельности от ListAdapter
  2. Создать переменную экземпляра для вашего фрагмента, который проводит открытый метод отправки (приз) в вашем MainActivity
  3. вызовов ваш метод непосредственно из операции с помощью фрагментаBuy.send (приз) в обратном вызове интерфейса
0

Вы можете пойти с шиной событий, чтобы связываться с фрагментом из вашего класса адаптера. Он упрощает связь между компонентами. хорошо работает с Activi связи, фрагменты, и фон threads.For простого процесса коммуникации вы можете пойти с Otto Bus Event ..

Для более подробной информации, вы можете пойти сюда .. Otto event bus

0

Вы можете общаться между Listview адаптером и с помощью интерфейса Фрагмента ,

Шаги:

1.Create интерфейс с методом отправки. 2.Используйте этот метод в своем фрагменте. 3. В то время как адаптер crating передает ссылку интерфейса (интерфейс реализации интерфейса класса .., который является текущим фрагментом.) 4) В адаптере, использующем этот метод вызова вызова объекта Interface.