【问题标题】:How to access local variable by storing it to class variable(global) in java android如何通过将局部变量存储到java android中的类变量(全局)来访问局部变量
【发布时间】:2020-05-18 11:18:42
【问题描述】:

片段 A

这里的问题是每当我打电话 passitem(),passqty(),passamt(),passtot() 我得到的值 在初始化时声明。即int totalp = 0; String itemp = "", qtyp = "", amtp = ""。我想要变量 itemp=item;,qtyp=qty;,amtp=amt;,totalp=total;i.e,local 可变数据。请帮帮我,我非常感谢你们。

另外 P.S:-当我尝试获取数据 itemp,qtyp.etc 时 onActivityCreated我已经很完美了。

public class Fragment_nonveg extends Fragment {


    TextView t,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
    CheckBox c1,c2,c3,c4,c5;
    Button b1,b2,b5,b6,b7,b8,b9,b10,b11,b12;
    ImageButton b3;
    int x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,g1,g2,g3,g4,g5,g6,g7,g8,g9,g10;
    String res,res1,res2,res3,res4,re,re1,re2,re3,re4;
    //FloatingActionButton b4;
    int totalp = 0;
    String itemp = "", qtyp = "", amtp = "";

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {

        super.onActivityCreated(savedInstanceState);
        int total = 0;
        String item = "", qty = "", amt = "";

                if (c1.isChecked() == true) {

                    item = item + c1.getText().toString() + "\n";
                    qty = qty + t2.getText().toString() + "\n";
                    amt = amt + t1.getText().toString() + "\n";
                    String t = t1.getText().toString();
                    total = total + Integer.parseInt(t);
                }
                if (c2.isChecked() == true) {
                    item = item + c2.getText().toString() + "\n";
                    qty = qty + t4.getText().toString() + "\n";
                    amt = amt + t3.getText().toString() + "\n";
                    String t = t3.getText().toString();
                    total = total + Integer.parseInt(t);
                }
                if (c3.isChecked() == true) {
                    item = item + c3.getText().toString() + "\n";
                    qty = qty + t6.getText().toString() + "\n";
                    amt = amt + t5.getText().toString() + "\n";
                    String t = t5.getText().toString();
                    total = total + Integer.parseInt(t);
                }
                if (c4.isChecked() == true) {
                    item = item + c4.getText().toString() + "\n";
                    qty = qty + t8.getText().toString() + "\n";
                    amt = amt + t7.getText().toString() + "\n";
                    String t = t7.getText().toString();
                    total = total + Integer.parseInt(t);

                }
                if (c5.isChecked() == true) {
                    item = item + c5.getText().toString() + "\n";
                    qty = qty + t10.getText().toString() + "\n";
                    amt = amt + t9.getText().toString() + "\n";
                    String t = t9.getText().toString();
                    total = total + Integer.parseInt(t);

                }
                itemp=item;
                qtyp=qty;
                amtp=amt;
                totalp=total;
 }
    public String passitem(){
        return itemp;
    }
    public String passqty(){
        return qtyp;
    }
    public String passamt(){
        return amtp;
    }
    public Integer passtot(){
        return totalp;
    }

}

我这样调用代码:

public class Menu extends AppCompatActivity {
  public FloatingActionButton b4;
  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);
    b4 = findViewById(R.id.fab);
    Fragment_nonveg fragment_n = new Fragment_nonveg();
    final String nitem=fragment_n.passitem();
    final String nqty=fragment_n.passqty();
    final String namt=fragment_n.passamt();
    final Integer ntotal=fragment_n.passtot();

【问题讨论】:

  • 能分享一下使用这个类的代码吗?
  • 我认为不需要该代码。因为它与其他类无关。Fragment_nonveg 中定义的函数passitem(),passqty()..etc 必须处理类变量(全局).@thelr 你能告诉我 itemp、qtyp 等在退出onActivityCreated 后正在重新设置吗?
  • 不,我不能不看到这些方法是如何被调用的。我不需要整个其他类,只需要包含对onActivityCreated() 和各种pass 方法的调用的代码sn-p。如果该代码过于复杂或“敏感”,请创建一个单独的类,将这些方法作为测试用例调用,确保它也中断,然后发送。
  • 这是我调用这些方法的代码:- public class Menu extends AppCompatActivity { public FloatingActionButton b4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu); b4 = findViewById(R.id.fab); Fragment_nonveg fragment_n = new Fragment_nonveg(); final String nitem=fragment_n.passitem(); final String nqty=fragment_n.passqty(); final String namt=fragment_n.passamt(); final Integer ntotal=fragment_n.passtot();
  • 另外 PS:-当我尝试在 onActivityCreated 中获取数据 itemp,qtyp.etc 时,我得到了完美的结果。它看起来像 itemp,qtyp等在退出onActivityCreated 后正在重置。

标签: java android fragment global local


【解决方案1】:

为了解决这个问题,我在Fragment_nonveg 中添加了一个getInstance 方法并调用它而不是构造一个新实例。 Fragment_nonveg 否则无法直接使用。

片段 A

    public class Fragment_nonveg extends Fragment {


        TextView t,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
        CheckBox c1,c2,c3,c4,c5;
        Button b1,b2,b5,b6,b7,b8,b9,b10,b11,b12;
        ImageButton b3;
        int x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,g1,g2,g3,g4,g5,g6,g7,g8,g9,g10;
        String res,res1,res2,res3,res4,re,re1,re2,re3,re4;
        public static int totalp;
    public static String itemp, qtyp, amtp;
    SharedPreferences sp;
    private static Fragment_nonveg instance;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Bundle bundle = this.getArguments();
        instance = this;
        return inflater.inflate(R.layout.fragment_nonveg, null);
    }


        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {

            super.onActivityCreated(savedInstanceState);
     //do your code
}
     public static Fragment_nonveg getInstance() {
            return instance;
        }
        public void calcu(){
            int total = 0;
            String item="",qty="",amt="";

            if (c1.isChecked() == true) {

                item=item+c1.getText().toString() + "\n";
                qty=qty+t2.getText().toString() + "\n";
                amt=amt+t1.getText().toString()+ "\n";
                String t = t1.getText().toString();
                total=total+Integer.parseInt(t);
            }
            if (c2.isChecked() == true) {
                item=item+c2.getText().toString()+"\n";
                qty=qty+t4.getText().toString()+"\n";
                amt=amt+t3.getText().toString() + "\n";
                String t = t3.getText().toString();
                total=total+Integer.parseInt(t);
            }
            if (c3.isChecked() == true) {
                item=item+c3.getText().toString() + "\n";
                qty=qty+t6.getText().toString() + "\n";
                amt=amt+t5.getText().toString() + "\n";
                String t = t5.getText().toString();
                total=total+Integer.parseInt(t);
            }
            if (c4.isChecked() == true) {
                item=item+c4.getText().toString() + "\n";
                qty=qty+t8.getText().toString() + "\n";
                amt=amt+t7.getText().toString()+ "\n";
                String t = t7.getText().toString();
                total=total+Integer.parseInt(t);

            }
            if (c5.isChecked() == true) {
                item = item + c5.getText().toString() + "\n";
                qty= qty + t10.getText().toString() + "\n";
                amt = amt+ t9.getText().toString() + "\n";
                String t = t9.getText().toString();
                total=total+Integer.parseInt(t);

            }
            itemp=item;
            qtyp=qty;
            amtp=amt;
            totalp=total;
            sp=this.getActivity().getSharedPreferences("calis", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor=sp.edit();
            editor.putString("k1",item);
            editor.putString("k2",qtyp);
            editor.putString("k3", amtp);
            editor.putInt("k4", totalp);
            editor.commit();
        }
    }

包含片段 A 的活动

public class Menu extends AppCompatActivity {

    TextView nonveg,veg,snacks,desert,beverges;
    ViewPager viewPager;
    PageViewAdapter pageViewAdapter;
    public FloatingActionButton b4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        b4 = findViewById(R.id.fab);
        b4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent obj4 = new Intent(Menu.this, Bill.class);
                Fragment_nonveg.getInstance().calcu();
                startActivity(obj4);
            }
        });

    }

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 2016-04-24
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多