如何在我的 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 中为数学计算创建一个变量。所以这里是步骤:
- 创建一个接口回调,将数据从 ListAdapter
发送到您的 activity
- 为您的片段创建实例变量,在您的 MainActivity
中保存 public 方法 send(prize)
- 在接口的回调中通过fragmentBuy.send(奖品)直接从activity调用你的方法
您可以使用事件总线从适配器返回到片段 class.It 简化了之间的通信 components.It 与活动、片段和后台的通信也表现良好 threads.For 简单的通信您可以使用 Otto Event Bus 进行处理..
更多详情,你可以去这里.. Otto event bus
您可以使用接口在 Listview 适配器和 Fragment 之间进行通信。
步骤:
1.Create 带有发送方法的接口。
2.Implement 你片段中的那个方法。
3. 在创建适配器时传递接口的引用(即接口实现 class.. 这是当前片段。)
4) 在适配器中使用该接口对象调用发送方法。
我的片段(称为 "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 中为数学计算创建一个变量。所以这里是步骤:
- 创建一个接口回调,将数据从 ListAdapter 发送到您的 activity
- 为您的片段创建实例变量,在您的 MainActivity 中保存 public 方法 send(prize)
- 在接口的回调中通过fragmentBuy.send(奖品)直接从activity调用你的方法
您可以使用事件总线从适配器返回到片段 class.It 简化了之间的通信 components.It 与活动、片段和后台的通信也表现良好 threads.For 简单的通信您可以使用 Otto Event Bus 进行处理..
更多详情,你可以去这里.. Otto event bus
您可以使用接口在 Listview 适配器和 Fragment 之间进行通信。
步骤:
1.Create 带有发送方法的接口。 2.Implement 你片段中的那个方法。 3. 在创建适配器时传递接口的引用(即接口实现 class.. 这是当前片段。) 4) 在适配器中使用该接口对象调用发送方法。