【问题标题】:How to initialize interface in Activity.如何在Activity中初始化界面。
【发布时间】:2017-08-04 12:08:08
【问题描述】:

当在导航抽屉活动中选择某个项目时,我需要在片段中调用一个方法。 为此,我创建了一个接口,我将从活动中初始化并调用一个方法,此外,我将在 Fragment 中实现此接口并覆盖此方法。 这是声明接口的代码sn-p。

public interface AlertForDiscardDefaultProfileChanges {
     void alertForDiscardDefaultProfileChanges(int navigationItemID);
}

这就是我在活动中初始化的方式。

    private AlertForDiscardDefaultProfileChanges alertForDiscardDefaultProfileChanges;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);
        alertForDiscardDefaultProfileChanges = (AlertForDiscardDefaultProfileChanges) this;
    }

这里我得到java.lang.ClassCastException 来初始化它。 不确定我在这里遗漏了什么或出了什么问题。

【问题讨论】:

  • 只需通过implements AlertForDiscardDefaultProfileChanges实现你的接口
  • 为什么?我不想在同一个activity中实现,我想在它的容器片段中实现这个接口。
  • 所以只做片段。有什么问题?
  • 我得到 java.lang.ClassCastException 用于在 Activity 中对其进行初始化。
  • 检查我的答案@MihirPatel 它将解决您的问题

标签: java android android-fragments android-activity interface


【解决方案1】:

您必须为您的活动/片段实现此接口,例如:

主要活动:

    public class MainActivity extends AppCompatActivity implements FragmentClassName.AlertForDiscardDefaultProfileChanges{

//override methods

@Override
    public void alertForDiscardDefaultProfileChanges(String navigationItemID) {
// now use navigationItemID here...
    }
}

【讨论】:

  • 这不是我要找的东西。我不想在同一个活动中实施。我想在它的容器片段中实现。这是我实现它的方法。 (new DefaultProfileFragment()).alertForDiscardDefaultProfileChanges();
  • 我已经提到你可以在活动中实现,也可以在片段类中实现
【解决方案2】:

这是我实现它的方法, 我通过要在其中实现方法的片段的对象调用方法。

片段类 -

 public class DefaultProfileFragment extends Fragment implements 
 AlertForDiscardDefaultProfileChanges {
 }

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.fragment_default_profile, container, 
    false);
    mContext = view.getContext();

    return view;
}

@Override
public void alertForDiscardDefaultProfileChanges(int navigationItemID) {
    showDismissWarning(navigationItemID);
}

我需要从中调用接口方法的活动。 一个片段类的简单对象和方法的名称。不需要做任何花哨的事情。无需初始化接口。

(new DefaultProfileFragment()).alertForDiscardDefaultProfileChang‌​‌​es(id);

【讨论】:

    【解决方案3】:

    第一步

    public interface AlertForDiscardDefaultProfileChanges {
    
         void alertForDiscardDefaultProfileChanges(int navigationItemID);
    }
    

    定义您希望从哪个活动和类传输数据的方法

    第 2 步 -

    也在第 1 步类中定义此方法。

    private  AlertForDiscardDefaultProfileChanges favListner;
    
    public void setAlertOnDiscardListner(AlertForDiscardDefaultProfileChanges 
                                    favOnTouchListner) {
    
            favListner = favOnTouchListner;
        }
    

    步骤-3。

    从第 1 步类传递值,如下所示

    favListner.alertForDiscardDefaultProfileChanges(int navigationItemID);
    

    第 4 步 您希望数据首先在哪个类中实现该接口。

    Class A implements YourActivity_where_interface define.AlertForDiscardDefaultProfileChanges{
    
    override Method.
    }
    

    第 5 步。

    您还应该在需要数据的那个类中做一件事。

    你应该从下面的 Create 方法初始化接口。

    YourActivity_where_interface 定义。setAlertOnDiscardListner(this);

    现在你可以玩了。

    【讨论】:

    • 这似乎是一个相当漫长的过程,我在一行中就完成了。 (new DefaultProfileFragment()).alertForDiscardDefaultProfileChang‌​es();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2018-02-05
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多