2014-04-26 165 views
0

我只是想在Android上開始製作aps,我對C++有點了解,但是我爲最簡單的事情奮戰了幾天 - 我無法讓按鈕工作。我不能讓我的按鈕工作

我嘗試每個教程的方法,我不能讓偵聽器按鈕 - 每次我做它我的程序只是壓碎。

代碼很簡單(我不會改變我下面的方法的任何東西),我也開始了全新的Android項目,並只是做那些按鈕和TextView的編輯在所有的教程:

package com.example.buttonwork; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v7.app.ActionBarActivity; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends ActionBarActivity { 
Button but1; 
TextView tv1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()) 
       .commit(); 
    } 
    tv1 = (TextView) findViewById(R.id.tv1); 
    but1 = (Button) findViewById(R.id.b1); 
    but1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      tv1.setText("Button pressed"); 
     } 
    }); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.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(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
     return rootView; 
    } 
} 

}

The LOGCAT: 
04-26 15:51:39.435: W/dalvikvm(7185): threadid=1: thread exiting with uncaught exception (group=0x418762a0) 
04-26 15:51:39.450: E/AndroidRuntime(7185): FATAL EXCEPTION: main 
04-26 15:51:39.450: E/AndroidRuntime(7185): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.buttonwork/com.example.buttonwork.MainActivity}: java.lang.NullPointerException 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at android.app.ActivityThread.access$700(ActivityThread.java:140) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at android.os.Looper.loop(Looper.java:137) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at android.app.ActivityThread.main(ActivityThread.java:4921) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at dalvik.system.NativeStart.main(Native Method) 
04-26 15:51:39.450: E/AndroidRuntime(7185): Caused by: java.lang.NullPointerException 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at com.example.buttonwork.MainActivity.onCreate(MainActivity.java:29) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at android.app.Activity.performCreate(Activity.java:5206) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
04-26 15:51:39.450: E/AndroidRuntime(7185):  at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
    04-26 15:51:39.450: E/AndroidRuntime(7185):  ... 11 more 

而且程序每次崩潰。我有一切導入,ID和名稱也很好。請幫助我,因爲現在我絕望了。我只是想通過這些簡單的東西來運行,並開始編碼的東西,真正起作用的,並具有輸出,但我陷在這樣一個簡單的一步......

+2

OMG!你的按鈕有什麼問題? –

+0

例外?發佈logcat。 –

+1

logcat中的堆棧跟蹤會準確告訴我們問題是什麼。通過編輯您的問題發佈,然後瞭解某人如何解決問題。當然,調試器是最簡單的方法。 – Simon

回答

1

在這裏你去 ..這是你在哪裏做的是錯誤。您試圖在您的活動中獲取參考,而不是您定義的片段。

刪除的onCreate()和你佔位符片段的按鈕,添加這些成分。這就是你得到一個空指針的原因。

注意:使用getActivity()引用您的組件在一個片段。

在你片段,你得讓像這樣的變化:

public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment(){} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
     return rootView; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 

     Button but1 = (Button)getActivity(). findViewById(R.id.b1); 
     TextView tv1 = (TextView)getActivity(). findViewById(R.id.tv1); 

     but1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       tv1.setText("Button pressed"); 

      } 
     }); 
    } 
} 

希望這有助於.. :)

+0

它對我很好,非常感謝! – Ralfo

+0

很高興我能幫助..請接受未來觀衆的答案.. :) – mike20132013

0

使用此和onCreate(Bundle savedInstanceState)方法

刪除 tb1bt1初始化代碼
/** 
* A placeholder fragment containing a simple view. 
*/ 
public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
tv1 = (TextView) (rootView.findViewById(R.id.tv1)); 
    but1 = (Button) (rootView.findViewById(R.id.b1)); 
    but1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      tv1.setText("Button pressed"); 
     } 
    }); 
     return rootView; 
    } 
} 
+0

這非常有幫助!謝謝你,夥計! – Ralfo