【问题标题】:Combining ListActivity and ActionBarActivity结合 ListActivity 和 ActionBarActivity
【发布时间】:2015-05-22 12:25:10
【问题描述】:

我目前正在构建至少 10 个 SDK,因此我必须使用 android-support-v7-appcompat 库来实现 ActionBar。我已经设置了ActionBar,但是我现在想添加一个ListActivity,但是这需要扩展我的类并且Java 没有多个inheritance。我应该怎么办?

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    getSupportActionBar().setIcon(R.drawable.ic_action_search);
    getSupportActionBar().setDisplayShowHomeEnabled(false);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
   }

 }

【问题讨论】:

  • 所以如果您已经在使用支持库,请使用 ListFragment
  • 当然可以,但是我如何扩展该类以使其包含 ActionBarActivity 和 ListFragment?

标签: java android


【解决方案1】:

ListActivity 尚未移植到 AppCompat。可能是因为您应该将其视为“已弃用”,而应使用 ListFragment。

片段将与 ActionBarActivity 一起使用,只需确保它们是来自支持库的片段。

阅读有关片段的this 链接。

对于您的用例,我只需在 xml 中定义片段。

【讨论】:

  • 如果回答了您的问题,请接受答案:)
【解决方案2】:

最简单的方法是在ActionBarActivity 中使用ListFragment。我是这样做的:

public class MyActivity extends ActionBarActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        MyFragment fragment = new MyFragment();
        getSupportFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commit();
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home: {
                finish();
                break;
            }

            default: {
                break;
            }
        }
        return true;
    }

    public static class MyFragment extends ListFragment {

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            ...
        }

        public void onListItemClick(ListView listView, View view, int position, long id) {
            ...
        }
    }
}

这样你甚至不需要一个xml,而且效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多