Hi all, I am rather new to Android programming in general and am having particular difficulty with the xml/java UI shuffle... I have a layout which I would like to use as the view displayed when a custom, view class is instantiated in the activity class. This much works fine by simply calling
setContentView(R.layout.mylayout) ; in the activity or from the custom view class through a handle to the activity. The trouble comes when I wish to interact with the widgets on the layout-- I've tried getting a handle on the buttons with myButton = (Button) findViewById(R.id.mybuttonid); and separately with Button myButton = new Button(contextHandle); myButton = (Button) findViewById(R.layout.mybuttonid); but in both cases whenever I try to call any methods from the assumed myButton object I get a NullPointerException in the logcat report; evidently myButton is not properly instantiated in either case given above. What is the proper way to instantiate components of a view in a case like this that combines xml and java so that they can call methods dynamically? Below is my code-- MyActivity Class: <code> package com.ccg.myactivity; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RadioButton; public class MyActivity extends Activity implements OnClickListener { private boolean touched = false; private RadioButton myRB; private Button runB; private CustomView myView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainlayout); myRB = (RadioButton) findViewById(R.id.testrb); runB = (Button) findViewById(R.id.goButton); //set onClick listeners for activity class runB.setOnClickListener(this); } public void onResume(){ super.onResume(); } public void onClick(View v) { // do something when the button is clicked if (myRB.isChecked()){ setContentView(R.layout.mylayout); myView = new CustomView(this,this); //passing in activity and context //handles to custom View class //myView.getAnotherB().setOnClickListener(this); // commented out as we //don't want to register the custom view's button with the Activty class's //OnClickListener; instead it should be registered with the custom View class's own //OnClickListener implementation. } else{ Log.d("me","alt click"); } } }</code> CustomView Class: <code> package com.ccg.myactivity; import android.app.Activity; import android.content.Context; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.*; import android.view.View.OnClickListener; public class CustomView extends View implements OnClickListener{ private Button anotherB; private Context contextHandle; private Activity actHandle; public CustomView(Context context, Activity act) { super(context); contextHandle = context; actHandle = act; //anotherB = new Button(contextHandle); //this shouldn't be necessary for //instantiation from XML widget initCustomView(); } public void initCustomView(){ anotherB = (Button) findViewById(R.id.nextbutton); anotherB.setOnClickListener(this); } public Button getAnotherB(){ return anotherB; } @Override public void onClick(View arg0) { // TODO Auto-generated method stub Log.d("me", "Got the custom click!"); } }</code> mainlayout.xml from which the default view is made: <code> <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/widget474" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"> <RadioGroup android:id="@+id/widget30" android:orientation="horizontal" android:layout_x="2dip" android:layout_y="57dip" android:layout_width="match_parent" android:layout_height="wrap_content"> <RadioButton android:layout_height="wrap_content" android:id="@+id/ testrb" android:textSize="15sp" android:text="Run" android:layout_width="wrap_content" android:textColor="#ffff99ff"></RadioButton> </RadioGroup> <Button android:layout_width="wrap_content" android:text="@string/ RUN" android:id="@+id/goButton" android:layout_height="wrap_content" android:layout_x="222dip" android:layout_y="110dip"></Button> </LinearLayout> </code> mylayout.xml from which the custom view's layout is created: <code> <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/widget0" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"> <Button android:id="@+id/nextbutton" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="work!!!" > </Button> </LinearLayout> </code> okay, if anybody can explain why any method calls from the button object anotherB (anotherB.setOnClickListener(this) above, but also the simpler anotherB.bringToFront()) cause a force close and a nullpointerexception in logcat with the above implementation I would be most appreciative. thanks! CCJ -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en