首页 > 解决方案 > 从 CustomListViewAdapter 获取和设置全局变量

问题描述

我希望通过从 firebase 数据库中检索数据来创建包含列表视图的片段。此列表视图获取具有按钮和搜索栏的卡片。我想要的只是让一个全局变量监听这些按钮。我尝试在片段本身中创建 onClicklistener 但没有成功。然后我为正在工作的适配器本身上的这些按钮创建了 onClicklistener。现在,当我使用 buttonclick 创建 Toast 时,Toast 字符串会按我的预期出现。但问题是我希望这个 Toasted 字符串存储在全局变量之类的地方,以便我也可以在另一个片段中使用它。所以我用:

 String alpha = ((MyApplication) getContext()).getCartitem();
                ((MyApplication)getContext()).setCartitem("XYZ");

在我的适配器类内部单击侦听器本身,但应用程序崩溃显示错误日志“ First cannot be cast to com.fastfrooot.fastfrooot.MyApplication ”。首先是我的 Activity 包含 Fragment 和 MyApplication 是类扩展应用程序。

我的应用程序.java

package com.fastfrooot.fastfrooot;

import android.app.Application;
import android.widget.Button;


public class MyApplication extends Application {
 private boolean[] cartsitem = {
  false,
  false,
  false,
  false,
  false,
  false
 };
 private String orderitem;
 private String pkname;
 private boolean oncomp = false;

 private Button[] cartbuttons = new Button[20];
 private String cartitem = "Alpha";



 public boolean[] getcartsitem() {
  return cartsitem;
 }

 public void setcartsitem(boolean[] cartsitem) {
  this.cartsitem = cartsitem;
 }

 public String getorderitem() {
  return orderitem;
 }

 public void setorderitem(String orderitem) {
  this.orderitem = orderitem;
 }

 public String getpkname() {
  return pkname;
 }

 public void setpkname(String pkname) {
  this.pkname = pkname;
 }

 public boolean getoncomp() {
  return oncomp;
 }

 public void setoncomp(boolean oncomp) {
  this.oncomp = oncomp;
 }

 public Button[] getcartbuttons() {
  return cartbuttons;
 }

 public void setCartbuttons(Button[] cartbuttons) {
  this.cartbuttons = cartbuttons;
 }

 public String getCartitem() {
  return cartitem;
 }

 public void setCartitem(String cartitem) {
  this.cartitem = cartitem;
 }


}

public class CustomListAdapterfir extends ArrayAdapter < Cardfir > {

 private static final String TAG = "CustomListAdapter";

 private Context mContext;
 private int mResource;
 private int lastPosition = -1;

 private int procount;
 String Cartkeitem;

 private static class ViewHolder {
  TextView title;
  ImageView image;
  TextView Status;
  Button cartbutton;
  SeekBar seekbar;
 }



 public CustomListAdapterfir(Context context, int resource, List < Cardfir > objects) {
  super(context, resource, objects);
  mContext = context;
  mResource = resource;





  //sets up the image loader library
  setupImageLoader();
 }

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



  //get the persons information
  final String title = getItem(position).getTitle();
  String imgUrl = getItem(position).getImgURL();
  final String Status = getItem(position).getStatus();
  Button cartbutton = getItem(position).getCartbutton();
  final SeekBar seekBar = getItem(position).getSeekbar();



  try {


   //create the view result for showing the animation
   final View result;

   //ViewHolder object
   final ViewHolder holder;

   if (convertView == null) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    convertView = inflater.inflate(mResource, parent, false);
    holder = new ViewHolder();
    holder.title = (TextView) convertView.findViewById(R.id.cardTitle);
    holder.Status = (TextView) convertView.findViewById(R.id.cardstat);
    holder.image = (ImageView) convertView.findViewById(R.id.cardImage);
    holder.seekbar = (SeekBar) convertView.findViewById(R.id.seekBarf);
    holder.cartbutton = (Button) convertView.findViewById(R.id.Addbutton);




    result = convertView;

    convertView.setTag(holder);
   } else {
    holder = (ViewHolder) convertView.getTag();
    result = convertView;
   }



   lastPosition = position;

   holder.title.setText(title);
   holder.Status.setText(Status);

   holder.cartbutton.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {

     int seekerpos = holder.seekbar.getProgress() + 1;




     Cartkeitem = title + " " + String.valueOf(seekerpos);
     Toast.makeText(mContext, Cartkeitem, Toast.LENGTH_SHORT).show();
     String alpha = ((MyApplication) getContext()).getCartitem();
     ((MyApplication) getContext()).setCartitem("XYZ");



    }
   });

   holder.seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
   });

   //create the imageloader object
   ImageLoader imageLoader = ImageLoader.getInstance();

   int defaultImage = mContext.getResources().getIdentifier("@drawable/logo", null, mContext.getPackageName());


   DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
    .cacheOnDisc(true).resetViewBeforeLoading(true)
    .showImageForEmptyUri(defaultImage)
    .showImageOnFail(defaultImage)
    .showImageOnLoading(defaultImage).build();

   imageLoader.displayImage(imgUrl, holder.image, options);

   return convertView;
  } catch (IllegalArgumentException e) {
   Log.e(TAG, "getView: IllegalArgumentException: " + e.getMessage());
   return convertView;
  }

 }


 private void setupImageLoader() {

  DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
   .cacheOnDisc(true).cacheInMemory(true)
   .imageScaleType(ImageScaleType.EXACTLY)
   .displayer(new FadeInBitmapDisplayer(300)).build();

  ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
    mContext)
   .defaultDisplayImageOptions(defaultOptions)
   .memoryCache(new WeakMemoryCache())
   .discCacheSize(100 * 1024 * 1024).build();

  ImageLoader.getInstance().init(config);

 }
}

public class Tab1fragment extends Fragment implements View.OnClickListener {

 private static final String TAG = "TAG1 fragment";
 private ListView mListView;
 DatabaseReference Complete = FirebaseDatabase.getInstance().getReference();
 DatabaseReference Products = Complete.child("Products");
 ValueEventListener productlistener;
 final ArrayList < Cardfir > list = new ArrayList < Cardfir > ();
 String productname;
 String producttype;
 final ArrayList < Button > Cartbuttons = new ArrayList < Button > ();
 final ArrayList < SeekBar > Seekbars = new ArrayList < SeekBar > ();
 int productnumber = -1;
 Button[] Cartsbut = new Button[20];



 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  View view = inflater.inflate(R.layout.tab1_fragment, container, false);

  mListView = (ListView) view.findViewById(R.id.listview);



  productlistener = Products.addValueEventListener(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot dataSnapshot) {

    for (final DataSnapshot delphi: dataSnapshot.getChildren()) {

     productnumber = productnumber + 1;
     productname = delphi.child("Name").getValue().toString();
     producttype = delphi.child("Type").getValue().toString();
     list.add(new Cardfir("drawable://" + R.drawable.trans, productname, producttype));
    }

    CustomListAdapterfir adapter = new CustomListAdapterfir(getActivity(), R.layout.card_layout_liveorder, list);
    mListView.setAdapter(adapter);
    Products.removeEventListener(productlistener);

   }

   @Override
   public void onCancelled(DatabaseError databaseError) {

   }
  });



  return view;
 }

 @Override
 public void onClick(View view) {
  Toast.makeText(getContext(), "HI", Toast.LENGTH_SHORT).show();
 }
}

标签: javaandroidfirebase-realtime-database

解决方案


推荐阅读