2014-10-29 145 views
-1

我是Android新手,所以我面临很多问题。我要做一个简单的程序,它可以从edittext中获取一个值,并通过单击按钮在textview中打印它。这里是我的代码: enter image description heresetText和OnClickListener不起作用

程序说,不幸的是它停止工作。但是,当我从setOnClickListener删除最后几行时,它工作正常。我也只通过setText测试了它。它也不起作用。谢谢。 logcat的: enter image description here

XML: enter image description here

+0

后你在这里logcat的..在什么情况下会 – codePG 2014-10-29 04:01:35

+0

'savedInstanceState'为空? – Sriram 2014-10-29 04:04:51

+0

我不知道。它是自动生成的。 – 2014-10-29 04:06:31

回答

1

你的代码应该是PlaceHolderFragment,像下面..

public class PlaceHolderFragment extends Fragment { 
    private EditText et; 
    private Button b; 
    private TextView tv; 

    @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(@Nullable Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 

     et=(EditText) getView().findViewById(R.id.EditText1); 
     b = (Button) getView().findViewById(R.id.Button1); 
     tv = (Button) getView().findViewById(R.id.textView3); 
     b.setOnClicklistener(new OnClickListener(){ 
      @Override 
      public void onClick(View arg0){ 
       tv.setText("Pressed"); 
      } 
     }); 
    } 
} 

而且从onCreate()

et=(EditText) findViewById(R.id.EditText1); 
b = (Button) findViewById(R.id.Button1); 
tv = (Button) findViewById(R.id.textView3); 
b.setOnClicklistener(new OnClickListener(){ 
    @Override 
    public void onClick(View arg0){ 
     tv.setText("Pressed"); 
    } 
}); 

删除这些代码试试这个...

更新

  1. activity_main.xml中

enter image description here

  • fragment_main.xml
  • enter image description here

  • MainActivity.java
  •  
    import android.support.annotation.Nullable; 
    import android.support.v7.app.ActionBarActivity; 
    import android.support.v4.app.Fragment; 
    import android.os.Bundle; 
    import android.view.LayoutInflater; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.view.ViewGroup; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.TextView; 
    
    public class MainActivity extends ActionBarActivity { 
    
        @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(); 
         } 
        } 
    
        @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 { 
    
         private EditText et; 
         private Button b; 
         private TextView tv; 
    
         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(@Nullable Bundle savedInstanceState) { 
          // TODO Auto-generated method stub 
          super.onActivityCreated(savedInstanceState); 
    
          et = (EditText) getView().findViewById(R.id.editText1); 
          b = (Button) getView().findViewById(R.id.button1); 
          tv = (TextView) getView().findViewById(R.id.textView1); 
          b.setOnClickListener(new OnClickListener() { 
           @Override 
           public void onClick(View arg0) { 
            tv.setText("Pressed"); 
           } 
          }); 
         } 
        } 
    } 
    

    输出:

    enter image description here

    +0

    它将工作相同,因为我们把代码onCreate .. – 2014-10-29 04:12:46

    +0

    它将如何工作相同的代码在onCreate ..你有活动主要相同的控制,如果你有意思你做错了方式..先学习机器人,然后做代码。 – Gunaseelan 2014-10-29 04:16:56

    +0

    你的控件应该是fragment_main。 – Gunaseelan 2014-10-29 04:17:52

    0

    我想你共享XML是fragment_mainactivity_main。确保你正在膨胀正确的xml,并且只能参考它的控制... NULL Pointer Exception正在生成,因为只有。

    根据你的代码,TextView的,和的EditText按钮必须驻留在activity_main.xml只有

    et=(EditText) findViewById(R.id.EditText1); 
    b = (Button) findViewById(R.id.Button1); 
    tv = (TextView) findViewById(R.id.textView3); 
    

    确认。

    如果控制在frgament_main,你需要使用这个代码:

    public class PlaceHolderFragment extends Fragment { 
        private EditText et; 
        private Button b; 
        private TextView tv; 
    
        @Override 
        public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
         View rootView = inflater.inflate(R.layout.fragment_main, container, 
          false); 
    
         et=(EditText) rootView.findViewById(R.id.EditText1); 
         b = (Button) rootView.findViewById(R.id.Button1); 
         tv = (TextView) rootView.findViewById(R.id.textView3); 
         b.setOnClicklistener(new OnClickListener(){ 
          @Override 
          public void onClick(View arg0){ 
           tv.setText("Pressed"); 
          } 
         }); 
         return rootView; 
        } 
    
    } 
    
    相关问题