【问题标题】:Button Inside Fragment won't work even without errors即使没有错误,片段内的按钮也不起作用
【发布时间】:2017-10-08 14:14:57
【问题描述】:

我在片段中的按钮不起作用。没有错误,也不知道有什么问题。

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;


public class GenApp extends Fragment {
EditText etBillAmt;
Spinner spinType, spinHours, spinDays, spinWeeks;
EditText etWattage, etHour, etDay, etWeek, etMonth;
Button btnCalculate;
String BillAmountS,h,d,w;
int i,dfrm,wfrm;
double BillAmount, PKwh, WattDouble, CPH, CPD, CPW, CPM, hrfrm;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.genapp, container, false);

    h = "8";
    d = "7";
    w = "4";
    etBillAmt = (EditText)rootView.findViewById(R.id.etBillAmt);
    spinType = (Spinner) rootView.findViewById(R.id.spinType);
    spinHours = (Spinner) rootView.findViewById(R.id.spinHours);
    spinDays = (Spinner) rootView.findViewById(R.id.spinDays);
    spinWeeks = (Spinner) rootView.findViewById(R.id.spinWeeks);
    etWattage = (EditText)rootView.findViewById(R.id.etWattage);
    etHour = (EditText)rootView.findViewById(R.id.etHour);
    etDay = (EditText)rootView.findViewById(R.id.etDay);
    etWeek = (EditText)rootView.findViewById(R.id.etWeek);
    etMonth = (EditText)rootView.findViewById(R.id.etMonth);
    btnCalculate = (Button)rootView.findViewById(R.id.btnCalculate);

    final String[] apptypearray = {"AIR COOLER/HUMIDIFIER", "BLENDER", "CELLPHONE CHARGER", "CFL(10 WATTS)", "CFL(18 WATTS)", "CHRISTMAS LIGHT(100 BULBS W/O BLINKER)", "CHRISTMAS LIGHT(100 BULBS W/ BLINKER)",
    "CLOTHES DRYER(HEATER)", "CLOTHES DRYER(MOTOR)", "COFFEE MAKER", "COMPUTER PRINTER", "COMPUTER W/MONITOR", "FLAT IRON(STANDARD)", "FLAT IRON(DELUXE)", "FLOOR POLISHER(STANDARD)", "FLOOR POLISHER(DELUXE)",
    "FLUORESCENT LAMP 21' (20 WATTS)", "FLUORESCENT LAMP 48' (40 WATTS)", "HAIR DRYER", "INCANDESCENT BULB (25 WATTS)", "INCANDESCENT BULB (50 WATTS)", "INCANDESCENT (100 WATTS)", "RECHARGEABLE LIGHTS/FANS", "SEWING MACHINE",
    "VACUUM CLEANER", "WAHING MACHINE AUTOMATIC (6 KG)", "WASHING MACHINE AUTOMATIC (10 KG)", "WASHING MACHINE TWIN TUB (6 KG)", "WASHING MACHINE TWIN TUB (10 KG)", "WATER DISPENSER(COOLING)", "WATER DISPENSER(HEATING)",
            "WATER HEATER", "WATER HEATER (PORTABLE)", "OTHER GENERAL APPLIANCES"};
    final double[] wattagearray = {65, 300, 6, 10, 18, 56, 16, 1600, 250, 600, 175, 225, 600, 1000, 200, 360, 32, 53, 320, 25, 50, 100, 12, 75, 800, 527, 1035, 277, 583, 90, 550, 3000, 1600};
    final double[] KWh = {0.33, 5.18, 6.64, 8.08, 10.12, 10.50, 10.87, 11.54, 11.80};
    final String[] hoursarray = {"15 minutes","30 minutes","45 minutes","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24"};
    final String[] daysarray = {"1","2","3","4","5","6","7"};
    final String[] weeksarray = {"1","2","3","4"};

    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, apptypearray);
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinType.setAdapter(spinnerArrayAdapter);
    spinType.setPrompt("Please choose your Appliance");
    spinType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            for (i = 0; i<apptypearray.length; i++){
                if(spinType.getItemAtPosition(position) == apptypearray[i]) {

                    try {
                        etWattage.setText(String.valueOf(wattagearray[i]));
                    } catch (Exception e) {
                        Toast.makeText(getActivity().getApplicationContext(), "Missing Entries", Toast.LENGTH_SHORT).show();
                    }
                }
            }
            etHour.setText("");
            etDay.setText("");
            etWeek.setText("");
            etMonth.setText("");

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
    ArrayAdapter<String> HourArrayAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item, hoursarray);
    HourArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinHours.setAdapter(HourArrayAdapter);
    int GP1 = HourArrayAdapter.getPosition(h);
    spinHours.setSelection(GP1);
    spinHours.setPrompt("Hours Used Per Day");
    spinHours.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> houradapterView, View view, int hpos, long l) {
            for(int hctr = 0; hctr<hoursarray.length; hctr++){
                if(spinHours.getItemAtPosition(hpos) == hoursarray[0]) {
                    hrfrm = 0.25;
                }
                else if (spinHours.getItemAtPosition(hpos) == hoursarray[1]) {
                    hrfrm = 0.5;
                }
                else if (spinHours.getItemAtPosition(hpos) == hoursarray[2]) {
                    hrfrm = 0.75;
                }
                else if (spinHours.getItemAtPosition(hpos) == hoursarray[hctr]) {
                    hrfrm = Double.parseDouble(hoursarray[hctr]);
                }

            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    ArrayAdapter<String> DayArrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, daysarray);
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
    spinDays.setAdapter(DayArrayAdapter);
    int GP2 = DayArrayAdapter.getPosition(d);
    spinDays.setSelection(GP2);
    spinDays.setPrompt("Days Used Per Week");
    spinDays.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> DayadapterView, View view, int dpos, long l) {
            for(int dctr = 0; dctr<daysarray.length;dctr++)
            {
                if(spinDays.getItemAtPosition(dpos)==daysarray[dctr])
                {
                    dfrm = Integer.parseInt(daysarray[dctr]);
                }
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

    ArrayAdapter<String> WeekArrayAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item, weeksarray);
    WeekArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinWeeks.setAdapter(WeekArrayAdapter);
    int GP3 = WeekArrayAdapter.getPosition(w);
    spinWeeks.setSelection(GP3);
    spinWeeks.setPrompt("Weeks used per Month");
    spinWeeks.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> WeekadapterView, View view, int wpos, long l) {
            for(int wkctr = 0; wkctr<weeksarray.length; wkctr++){
                if(spinWeeks.getItemAtPosition(wpos)==weeksarray[wkctr]) {
                    wfrm = Integer.parseInt(weeksarray[wkctr]);
                }
            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

    btnCalculate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View rootView) {
            try {
                WattDouble = Double.parseDouble(etWattage.getText().toString());
                BillAmountS = etBillAmt.getText().toString();
                BillAmount = Double.parseDouble(BillAmountS);
                if (BillAmount >= 0 && BillAmount <= 108) {
                    PKwh = KWh[0];
                } else if (BillAmount >= 109 && BillAmount <= 338) {
                    PKwh = KWh[1];
                } else if (BillAmount >= 339 && BillAmount <= 573) {
                    PKwh = KWh[2];
                } else if (BillAmount >= 574 && BillAmount <= 1021) {
                    PKwh = KWh[3];
                } else if (BillAmount >= 1022 && BillAmount <= 2109) {
                    PKwh = KWh[4];
                } else if (BillAmount >= 2110 && BillAmount <= 3271) {
                    PKwh = KWh[5];
                } else if (BillAmount >= 3272 && BillAmount <= 4625) {
                    PKwh = KWh[6];
                } else if (BillAmount >= 4626 && BillAmount <= 7684) {
                    PKwh = KWh[7];
                } else if (BillAmount >= 7685) {
                    PKwh = KWh[8];
                } else {
                    Toast.makeText(getActivity().getApplicationContext(), "Invalid Amount", Toast.LENGTH_LONG);
                }
                /*Cost per hour = Rate x [(appliance wattage x 0.8 x 0.8) + (appliance wattage x 0.2)] / 1000)*/
                CPH = PKwh * (WattDouble / 1000);
                CPD = CPH * hrfrm;
                CPW = CPD * dfrm;
                CPM = CPW * wfrm;

                etHour.setText("PhP " + String.format("%.2f", CPH));
                etDay.setText("PhP " + String.format("%.2f", CPD));
                etWeek.setText("PhP " + String.format("%.2f", CPW));
                etMonth.setText("PhP " + String.format("%.2f", CPM));
            } catch (NumberFormatException e) {
                Toast.makeText(getActivity().getApplicationContext(), "Invalid Entry", Toast.LENGTH_LONG);


            }
    }

});
    return rootView;
}
}

点击时的原始视图是:(view v),我从网上读到一些东西说它应该和我的inflater.inflate 同名,所以我把它改成了(view rootView)。两人什么都没发生。按钮仍然不起作用。

【问题讨论】:

  • 在哪里以及如何初始化 btnCalculate?
  • btnCalculate = (Button)rootView.findViewById(R.id.btnCalculate);我在最终 View rootView = inflater.inflate(R.layout.genapp, container, false); 之后对其进行了初始化线。谢谢!
  • 如果不是太长,您可以发布完整的 onCreateView 代码(或简化版本)以及您的 xml 布局吗?是否有任何布局可能会阻止点击事件?
  • schemas.android.com/apk/res/android" xmlns:tools="schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/ activity_vertical_margin" android:paddingLeft="@dimen/activity_horizo​​ntal_margin" android:paddingRight="@dimen/activity_horizo​​ntal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.jmljrkss.jarkassmeralco.MainActivity$PlaceholderFragment">跨度>

标签: java android button onclick fragment


【解决方案1】:

尝试检查您是否收到此消息

btnCalculate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    Toast.makeText(view.getContext(), "Onclick Listeber button calculate", Toast.LENGTH_LONG).show();

【讨论】:

  • 这意味着您的点击事件正在工作,很可能逻辑有问题并且它没有产生您期望的输出。我的建议:尝试使用断点调试您的程序。
  • 非常感谢你们的帮助:)
  • @JmJarkass 将标题更改为已解决,以免其他人再次浪费时间,如果解决了您的问题,请接受答案。还有一件事你应该尽可能少地使用应用程序上下文。如果活动上下文可用,则使用它。
【解决方案2】:

您尚未初始化按钮。 首先初始化它

Button btnCalculate = (Button) rootView.findViewById(R.id.value);
btnCalculate.setOnClickListener( now ur function)

【讨论】:

  • 我已经在 Final View rootView 行之后初始化了按钮。我应该在 onClick 中再次初始化它吗?谢谢!
  • 不,如果你已经初始化了,那么你不需要再次初始化它
  • 我会错过任何代码吗?除了初始化?谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-06-22
  • 2023-03-10
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
相关资源
最近更新 更多