【问题标题】:Activity to SherlockFragmentSherlockFragment 的活动
【发布时间】:2012-10-21 10:07:32
【问题描述】:

我想将我的应用程序(扩展 Activity)更改为片段(扩展 SherlockFragment)

如果我改变它,我有很多错误;

public class AlarmClock extends SherlockFragment implements OnClickListener {

这是我的 onCreateView:

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

    {
        // sanity check -- no database, no clock
        if (getContentResolver() == null) {
            new AlertDialog.Builder(this)
                    .setTitle(getString(R.string.error))
                    .setMessage(getString(R.string.dberror))
                    .setPositiveButton(android.R.string.ok,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    finish();
                                }
                            })
                    .setOnCancelListener(
                            new DialogInterface.OnCancelListener() {
                                public void onCancel(DialogInterface dialog) {
                                    finish();
                                }
                            }).setIcon(android.R.drawable.ic_dialog_alert)
                    .create().show();
            return;
        }
        View view = inflater.inflate(R.layout.alarm_clock, container, false);
        // menu buttons
        add = (ImageButton) findViewById(R.id.ibAdd);
        snooze = (ImageButton) findViewById(R.id.ibSnooze);

        add.setOnClickListener(this);
        snooze.setOnClickListener(this);
        mFactory = LayoutInflater.from(this);
        mPrefs = getSharedPreferences(PREFERENCES, 0);

        mCursor = Alarms.getAlarmsCursor(getContentResolver());
        mAlarmsList = (ListView) findViewById(R.id.alarms_list);
        mAlarmsList.setAdapter(new AlarmTimeAdapter(this, mCursor));
        mAlarmsList.setVerticalScrollBarEnabled(true);
        mAlarmsList.setItemsCanFocus(true);

        mClockLayout = (ViewGroup) findViewById(R.id.clock);

        mQuickAlarm = findViewById(R.id.ibSnooze);
        mQuickAlarm.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showQuickAlarmDialog();
            }
        });

        setVolumeControlStream(android.media.AudioManager.STREAM_ALARM);
        setQuickAlarmVisibility(mPrefs.getBoolean(PREF_SHOW_QUICK_ALARM, true));
        return view;
    }

因为没有Activity,所以有很多错误。 如果是 Activity 就可以了。

我使用“扩展 SherlockFragment”是因为我想将它添加到表格中。 如何解决这个问题?请帮帮我。

【问题讨论】:

  • 什么错误?上下文错误??
  • 方法 getContentResolver() 未定义类型 AlarmClock 方法 findViewById(int) 未定义类型 AlarmClock 方法 finish() 未定义类型 new DialogInterface.OnClickListener(){} 等..

标签: android android-activity android-fragments actionbarsherlock


【解决方案1】:

如果我是对的,Fragments 肯定必须在 Activity 中使用。

所以不要使用 this,而是使用 getActivity(); 来获取 Activity(它使用这个片段)上下文。

类似:

getActivity.finish();

如果是 findViewById(//some Id);

像这样使用它:

inflatedView.findViewById(//Id);

【讨论】:

  • inflatedView 无法解析。我必须使用 Fragments,因为我需要在 Tabs 中使用它。这是我的主要活动(启动器)公共类 ABSTabsViewPagerActivity 扩展 SherlockFragmentActivity
【解决方案2】:

Fragment 不是Context(与ActivityApplication 不同)。所以很多方法都不可用。

但是它可以访问它所附加的上下文。通常,您可以在片段中调用getActivity() 来获取它。您应该使用isAdded() 方法检查Fragment 是否是活动的一部分。

您应该阅读有关 Fragments、移植现有活动以使用 Fragments 的信息,......使用 Google 可以获得教程。

【讨论】:

  • 扩展SherlockFragment时如何为ActionBarSherlock使用onCreateOptionMenu? @MarvinLabs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多