5

我想要一个按钮在我的设置屏幕上。这个确切的问题已被问到here。但遗憾的是没有答案。:(

在此处输入图像描述

为了达到这个目的,我创建了一个这样的自定义首选项 -

  public class CustomPreference extends Preference {

    private LinearLayout mWidgetContainer;
    private View mRowView;

    public CustomPreference(Context context) {
        super(context);
    }

    public CustomPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected View onCreateView(ViewGroup parent) {
        LayoutInflater viewInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        mRowView = viewInflater.inflate(R.layout.preferences_row_view, parent, false);

        mWidgetContainer = (LinearLayout) mRowView.findViewById(android.R.id.widget_frame);

        Button button = new Button(getContext());
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        button.setLayoutParams(params);
        button.setBackgroundResource(R.drawable.listview_row_bg);
        button.setTextSize(14);
        button.setPadding(5, 5, 5, 5);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getContext(), BuyScreenActivity.class);
                getContext().startActivity(intent);
            }
        });
        button.setTypeface(null, Typeface.BOLD);
        button.setText("Buy now");
        mWidgetContainer.addView(button);

        return mRowView;
    }
}

这确实有效。但它的行为很奇怪。正如您在单击该按钮时所看到的那样,我将用户带到 Activity 称为BuyScreenActivity. 奇怪的是,当我重新按下时BuyScreenActivity,我回到了我的设置屏幕,但onDestroy根本没有调用onStopof 。BuyScreenActivity为什么会这样?

如果我向下滚动设置屏幕,则会调用onStop& 。onDestroy为什么必须这样做?

4

1 回答 1

0

我不知道为什么会这样,但如果它困扰你,只需覆盖 BuyScreenActivity.java 中的 onBackPressed() :

@Override
public void onBackPressed() {
    startActivity(new Intent(getContext(), SettingsACtivity.class));
}

请注意,我假设您只能通过设置进入 BuyScreen。如果不是,那么很容易将前一个活动的名称放入意图数据中,然后将其切换到所需的活动。

于 2020-10-22T10:58:29.940 回答