2015-03-31 21 views
1

如何在一個活動中使用一個java類,我的意思是將這個活動的不同組件分散在一堆java類中。我有點新的Android和這是我到目前爲止已經試過:如何在一個活動中使用java類?

MainActivity.java

package com.example.alex.myapplication; 



import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 



public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    new Something(this); 


} 





@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
    } 

Something.java

import android.view.View; 
import android.widget.EditText; 
import android.widget.Button; 
import android.app.Activity; 




    public class Something { 

    private Activity activity; 
    private Button add,subtract,multiply,devide; 
    private EditText editA, editB, editC; 
    private double doubleA,doubleB,doubleC; 





     public Something(Activity a){ 

       activity=a; 
       click(); 

     } 


     public void click(){ 
      editA = (EditText) activity.findViewById(R.id.editText); 
      editB = (EditText) activity.findViewById(R.id.editText2); 
      editC = (EditText) activity.findViewById(R.id.editText3); 
      doubleA =Double.parseDouble(editA.getText().toString()); 
      doubleB =Double.parseDouble(editB.getText().toString()); 


       add = (Button) activity.findViewById(R.id.add); 
       subtract = (Button) activity.findViewById(R.id.subtract); 
       multiply = (Button) activity.findViewById(R.id.multiply); 
       devide = (Button) activity.findViewById(R.id.devide); 

       add.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 

        doubleC = doubleA+doubleB; 
        String s = "" + doubleC; 
         editC.setText(s); 


        } 
       }); 

       subtract.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        doubleC = doubleA-doubleB; 
        String s = "" + doubleC; 
        editC.setText(s); 


       } 
      }); 

       multiply.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        doubleC = doubleA*doubleB; 
        String s = "" + doubleC; 
        editC.setText(s); 


       } 
      }); 



      devide.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        doubleC = doubleA/doubleB; 
        String s = "" + doubleC; 
        editC.setText(s); 


       } 
      }); 



     } 



     } 

所以我不確定爲什麼我的聽衆不在我的按鈕上工作,所以我嘗試將活動傳遞給該類聽衆添加到按鈕,但實際上現在不工作,現在我的應用程序甚至不會在模擬器中啓動。我想要做的就是讓「MainActivity」處理「Gui」,並讓「Something」類處理聽衆,但無論我做什麼,我都無法讓他們彼此通信以形成一個Activity。

logcat的

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference 
     at android.app.Activity.findViewById(Activity.java:2071) 
     at com.example.alex.myapplication.Something.click(Something.java:32) 
     at com.example.alex.myapplication.MainActivity.onCreate(MainActivity.java:19) 
     at android.app.Activity.performCreate(Activity.java:5937) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
     at android.app.ActivityThread.performLaunchActivity 
(ActivityThread.java:2251) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
     at android.app.ActivityThread.access$800(ActivityThread.java:144) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5221) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run   (ZygoteInit.java:899) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
+0

*如果它崩潰,你在LogCat中得到什麼信息?* – immibis 2015-04-01 23:25:24

+0

@immibis它並不真正崩潰,它不會啓動,它只是說有問題,它不會啓動。順便說一句,我很感謝你試圖幫助我,我想要做的就是讓「MainActivity」成爲我的GUI,並且讓「Something」處理聽衆,讓他們都聚合成一個活動,但似乎不可能。 – user4601488 2015-04-01 23:38:45

+0

Something.java的第32行是什麼? – immibis 2015-04-02 00:59:51

回答

1

據我所知,這將有助於其他遇到與我一樣的問題的其他人我受益,問題在於我需要將活動傳遞給我的構造函數,並將所有內容初始化爲該構造函數。像Something(Activity a){
aT1 = (EditText) a.findViewById(R.id.numberOne); aT2 = (EditText) a.findViewById(R.id.numberTwo); aT3 = (EditText) a.findViewById(R.id.result); add = (Button) a.findViewById(R.id.add); subtract = (Button) a.findViewById(R.id.subtract); multiply = (Button) a.findViewById(R.id.multiply); devide = (Button) a.findViewById(R.id.devide); }

你在主要活動中需要做的事情就是在你創建一個實例/執行代碼時傳遞Activity(例如:Something s = new Something(this);/new Something(this);)你可以直接調用s.click();它應該工作。

1

像一個職位之前XD 1個Java類,再調用它按下按鈕之後,例如,你可以有一個看不見的按鈕,任何你想要的無形單選按鈕,只是用點擊它變成可見,並且對您有用,這裏,我去:

首先控制該活動的變量要做

String num =""; 

然後讓你的按鈕,我使用他們的2和別人是看不見的

Button bn1; 
Button bn2; 
Button bn3; 
Button bn4; 
bn3.setVisibility(View.INVISIBLE); 
bn4.setVisibility(View.INVISIBLE); 

然後按鈕代碼,取決於你有多少按鍵要

Button.setOnClickListener(new Button onclickListener(){ 
     public void onClick(){ 
      //get a default variable in this case String num 
    Intent intent = new Intent(MainActivity.this, MainActivity.class); num="cero"; intent.putExtra("po", num); 
         CodigoPeticion=2; startActivityForResult (intent,CodigoPeticion); finish(); break; 
       } 
      } 
     }); 

這一項得到字符串編號:

Bundle extras = getIntent().getExtras(); 
     if (extras!= null) { 
      num =extras.getString("po"); 
     } 

,並在最後但並非最不重要這個取決於字符串做些事情:

if (num.matches("cero")){ 
       //do something, enable more buttons, disable radiobuttons, 
bn3.setVisibility(View.VISIBLE); 
      }else if(num.matches("one")){//this string is from another button 
       //do something else in the same activity, as you spected enable radiobuttons, show a image, etc 
bn4.setVisibility(View.VISIBLE); 
      }else{ 
       //some textview with a specific title 
       TextView.setText("Something's Wrong"); 
      } 

不要忘記bn3和bn4聽衆!

希望能幫到你,看到你!

+0

我已經知道如何做點擊和東西大聲笑,沒有真正回答我的問題?只想在同一活動 – user4601488 2015-04-01 00:30:04

+0

中使用多個類,因爲我在onClickListener中發佈了這個類,它的意圖是調用同一個活動,但是取決於onclick發送一個管理「下一個」活動的字符串(是相同的,但要做另一件事) – 2015-04-01 00:38:39

1

我認爲你應該重新安排代碼有onClickListener東西構造函數中:

Something.java

import android.view.View; 
import android.widget.EditText; 
import android.widget.Button; 
import android.app.Activity; 

public class Something { 

    private Activity activity; 
    private Button add, subtract, multiply, devide; 
    private EditText editA, editB, editC; 
    private double doubleA, doubleB, doubleC; 

    public Something(Activity a) { 

     activity = a; 

     editA = (EditText) activity.findViewById(R.id.editText); 
     editB = (EditText) activity.findViewById(R.id.editText2); 
     editC = (EditText) activity.findViewById(R.id.editText3); 

     add = (Button) activity.findViewById(R.id.add); 
     subtract = (Button) activity.findViewById(R.id.subtract); 
     multiply = (Button) activity.findViewById(R.id.multiply); 
     devide = (Button) activity.findViewById(R.id.devide); 

     add.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       click(1); 

      } 
     }); 

     subtract.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       click(2); 

      } 
     }); 

     multiply.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       click(3); 
      } 
     }); 

     devide.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       click(4); 
      } 
     }); 
    } 


    public void click(int calculate) { 

     // assume number entered - no error 
     doubleA = Double.parseDouble(editA.getText().toString()); 
     doubleB = Double.parseDouble(editB.getText().toString()); 

     switch (calculate) { 

      case 1: 
       doubleC = doubleA + doubleB; 
       String s = "" + doubleC; 
       editC.setText(s); 
       break; 

      case 2: 
       doubleC = doubleA - doubleB; 
       String s = "" + doubleC; 
       editC.setText(s); 
       break; 

      case 3: 
       doubleC = doubleA * doubleB; 
       String s = "" + doubleC; 
       editC.setText(s); 
       break; 

      case 4: 
       doubleC = doubleA/doubleB; 
       String s = "" + doubleC; 
       editC.setText(s); 
       break; 

      default: 
       break; 

     } 

    } 

} 

我認爲這個問題是主要的構造函數中把「點擊()」方法只運行一次代碼。我希望這有幫助!

1

你可以在主要活動中使用你的「東西」類。在主要活動

首先初始化「東西」類由

Something s = new Something(MainActivity.this); 

比你可以使用這個類的每一個方法,在主Activity.Just因爲你想,像這樣

s.add.setonclicklistener(... 

s.click(); 
//Just use like this. 
+0

我像你說的那樣做了,它沒有工作?它不想在我的模擬器中啓動。 – user4601488 2015-04-01 14:20:21

相關問題