Your CustomView implementation is a bit skewed. Your button will be null since, the CustomView doesn't yet know what elements it has. You will need to first setup the layout for this custom view.
*Thanks and Regards, Kumar Bibek* * http://techdroid.kbeanie.com http://www.kbeanie.com* On Wed, Aug 3, 2011 at 12:39 AM, Kumar Bibek <coomar....@gmail.com> wrote: > Your first code is the correct way to initialize stuff. Something else is > going wrong. Please post what your logcat says. > > *Thanks and Regards, > Kumar Bibek* > * > http://techdroid.kbeanie.com > http://www.kbeanie.com* > > > > On Wed, Aug 3, 2011 at 12:35 AM, CresCoJeff <heatag...@gmail.com> wrote: > >> 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 > > > -- 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