This is my view's XML file:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <EditText
        android:id="@+id/bsv_edit_beaconname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Beacon Name" />
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <CheckBox
        android:id="@+id/bsv_check_fix"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/cinit_table_isfixpoint" />
    <CheckBox
        android:id="@+id/bsv_check_draw"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/cinit_table_drawbeacon" />
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="horizontal">
    <Button
        android:id="@+id/bsv_btn_setpos"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:onClick="set_position_click"
        android:text="@string/cinit_set_position" />
    <TextView
        android:id="@+id/bsv_text_pos"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Position ?" />
</LinearLayout>
With the corresponding java class being the following
package talogs.beacontalogs;
import android.content.Context;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class BeaconSetupView extends LinearLayout {
    private static final String TAG = "BeaconSetupView";
    private EditText edit_beaconName;
    private CheckBox check_isFixpoint;
    private CheckBox check_draw;
    private Button btn_setpos;
    private TextView text_pos;
    public BeaconSetupView(Context context) {
        this(context, null);
    }
    public BeaconSetupView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }
    public BeaconSetupView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }
    public void init(Context context) {
        // inflate(getContext(), R.layout.beacon_setup_view, this);
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate( R.layout.beacon_setup_view, this );
        edit_beaconName = (EditText) findViewById(R.id.bsv_edit_beaconname);
        check_isFixpoint = (CheckBox) findViewById(R.id.bsv_check_fix);
        check_draw = (CheckBox) findViewById(R.id.bsv_check_draw);
        btn_setpos = (Button) findViewById(R.id.bsv_btn_setpos);
        text_pos = (TextView) findViewById(R.id.bsv_text_pos);
    }
    public void setPosition(Point point) {
        Log.v(TAG, "setting position to " + point.toString());
        text_pos.setText(String.format("(%d, %d)", point.x, point.y));
    }
}
My custom view BeaconSetupView is created programmatically using this code when a button in an activity is pressed.
public void btn_addbeacon_Click(View view) {
    BeaconSetupView beacon = new BeaconSetupView(this);
    beaconList.addView(beacon, beaconList.getChildCount() - 1);
}
The button that's part of the custom view calls this method:
public void set_position_click(View view) {
    ViewParent parent1 = view.getParent();
    ViewParent parent2 = parent1.getParent();
    BeaconSetupView bsv = (BeaconSetupView) view.getParent().getParent();
    Log.v(LOG_TAG, "set_position called, point is currently " + String.valueOf(lastClicked));
    if (lastClicked != null) {
        bsv.setPosition(lastClicked);
    }
}
The problem is that the button click cannot be implemented outside of the root activity (because it has data that I need), but I also need to get its corresponding BeaconSetupView. Calling view.getParent().getParent() and casting it results in a ClassCastException. So I tried changing the root element of the XML layout to BeaconSetupView, but that causes the app to crash when the view is first added to the activity.
I either need a way to cast my custom class properly and still be able to add it programmatically to my activity, or I need to be able to access the activity's instance from another class that doesn't have a reference to it. What are my options?
