2014-04-01 46 views
0

我有一个简单的Android应用程序,应该将文本更改为“点击”当我点击一个按钮。但是,当我运行代码并尝试单击该按钮时,该按钮发出蓝光,但没有其他事情发生。主要方法和相应的xml如下所示。谢谢你的帮助!简单的Android按钮故障

package com.example.fortesting; 

import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
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; 
import android.os.Build; 

public class MainActivity extends ActionBarActivity { 

Button button; 
TextView tv1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 
    } 

    addListenerOnButton(); 

} 

public void addListenerOnButton() { 

    button = (Button) findViewById(R.id.btn_bt); 
    tv1 = (TextView) findViewById(R.id.textView1); 
    //tv1.setText("Well, this works");; 

    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
       tv1.setText("Clicked!"); 
     } 

    }); 
    button.setClickable(true); 

} 




@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.main, container, 
       false); 
     return rootView; 
    } 
} 

} 

这里是我的xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/container"> 


     <Button 
      android:id="@+id/btn_bt" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="45dp" 
      android:text="Click Me!" /> 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/btn_bt" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="69dp" 
      android:text="Large Text" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

</RelativeLayout> 

回答

0

当你声明TV1您必须声明为最后访问的OnClickListener内,当它来避免这个错误:

无法引用在不同方法中定义的内部类中的非最终变量tv1

另外,将您的addListenerOnButton()我thod呼叫SupportFragmentManager块之上:

... 
final TextView tv1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    addListenerOnButton(); 

    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 
    } 
} 
... 

希望这有助于!