从Android片段类访问抽象方法的类组织

时间:2015-02-17 19:19:46

标签: java android android-fragments abstract-class abstract-methods

我不确定我的问题陈述是什么,正如你可以从标题中看出来的那样。我有一个扩展Activity的抽象类A. A类定义了一个抽象方法:

public abstract class A extends Activity {
    ActionBar.Tab devicesTab, otherTab;
    Fragment fragmentTab = new FragmentTab();

    protected abstract void connectBluetooth(BluetoothDevice deviceToConnect);
}

实现connectBluetooth(BluetoothDevice deviceToConnect)的类扩展了A类:

public class MainActivity extends A {

    @Override
    protected void connectBluetooth(BluetoothDevice deviceToConnect)
    {
        Intent intent = new Intent(this, bActivity.class);
        intent.putExtra(BluetoothDevice.EXTRA_DEVICE, deviceToConnect);
        this.startActivity(intent);
    }
}

在A类中,我有一个Fragment,它有自己的类,FragmentTab类扩展了Fragment。此类包含允许用户选择要连接的设备的UI。我需要将该设备传递给A类或访问connectBluetooth(BluetoothDevice deviceToConnect),以便主要活动可以从它开始。我尝试过使用" wrapper"方法,但它总是导致方法需要是静态的,这不允许我使用connectBluetooth(BluetoothDevice deviceToConnect),因为它是一个抽象的受保护方法。

我该怎么做才能解决这个问题?它需要另一堂课吗?或者我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

我需要从Fragment创建一个事件回调到我的活动。在Simon的评论之后,谢谢Simon,我研究了Fragments,接口和回调。这解决了我的问题,但我同意设计可以重新设计。

在FragmentTab类中,我需要一个接口:

OnDeviceSelectedListener mDeviceListener;

public interface OnDeviceSelectedListener
{
    public void onDeviceSelected(BluetoothDevice deviceToConnect);
}

此外,需要将其附加到活动:

@Override
public void onAttach(Activity activity)
{
    super.onAttach(activity);

    try
    {
        mDeviceListener = (OnDeviceSelectedListener)activity;
    }
    catch (ClassCastException e)
    {
        throw new ClassCastException(activity.toString() + "must implement OnDeviceSelectedListner");
    }
}

之后,OnItemClickListener调用在A类中实现的OnDeviceSelected方法。

...  mDeviceListener.onDeviceSelected(deviceToConnect);

实现该方法的A类必须具有“implements”描述:

public abstract class A extends Activity implements FragmentTab.OnDeviceSelectedListener
{   ...
} 

最后是A类中的实现:

public void onDeviceSelected(BluetoothDevice deviceToConnect)
{
    connectBluetooth(deviceToConnect);
}