2013-05-08 135 views
2

activity_main.xml中按钮点击不起作用

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
tools:context=".MainActivity" > 

<fragment 
    android:id="@+id/fragment1" 
    android:name="sithi.test.fragmenttest.Fragment1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</RelativeLayout> 

fragment1.xml

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

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Button" 
    android:onClick="btnClick1" /> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Large Text" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

</LinearLayout> 

ActivityMain.java

public class MainActivity extends Activity { 

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

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

} 

Fragment1.java

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public class Fragment1 extends Fragment 
{ 
    TextView tv; 
    @Override 
    public void onStart() 
    { 
    // TODO Auto-generated method stub 
    super.onStart(); 
    tv=(TextView)getView().findViewById(R.id.textView1); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    { 
    // TODO Auto-generated method stub 
    //inflater.inflate(resource, root, attachToRoot); 
    return inflater.inflate(R.layout.fragment1, container, false); 
    } 

    public void btnClick1(View view) 
    { 
    tv.setText("dsdsdasda"); 
    } 


    } 

我创建的XML文件和类这样的,但在btnClick1() Android的碎片也不能正常工作。 当我点击片段中的按钮时,它会出现错误。我在Fragment类中写了那个按钮点击函数。

+0

提供日志.. – bakriOnFire 2013-05-08 07:36:35

+0

05-08 12:44:43.156:W/dalvikvm(29123):threadid = 1:线程以未捕获的异常退出(group = 0x40aa6210) 05-08 12:44:43.436:E/AndroidRuntime(29123):致命异常:main 05-08 12:44:43.436:E/AndroidRuntime(29123):java.lang.IllegalStateException:在活动类sithi.test中找不到方法btnClick1(View)。 fragmenttest.MainActivity为视图类android.widget.Button ID为'button1'的onClick处理程序 – 2013-05-08 07:44:14

回答

2

您需要在片段代码中分配OnClickListener才能使其工作。请参阅Snicolas对“为什么”的回答。

+1

我重写了onStart()方法并在onStart()方法中分配了OnClickListener。它工作得很好。 – 2013-05-08 08:00:44

+0

@ user2361252'onCreateView'或'onViewCreated'可能是更好的选择。 – 2013-05-08 08:24:49

9

XML onClick的实现方式是针对活动而不是片段。该活动应拥有btnClick1方法,而不是片段。

+0

所以我们如何才能实现onclickListener的片段? – Saad 2013-05-08 07:39:09

+0

我可以知道如何从活动中获取该btnClick1事件。有没有办法做到这一点? – 2013-05-08 07:41:39

+3

最受欢迎的方式是以编程方式使用侦听器。 xml方式仅用于玩具应用程序。 myButton.setOnClickListener(new OnClickListener(){void onClicked(View v){// yourcode here}}); – Snicolas 2013-05-08 07:42:04