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

Reply via email to