【问题标题】:how to simulate AppCompatActivity and ListActivity extend behaviors如何模拟 AppCompatActivity 和 ListActivity 扩展行为
【发布时间】:2016-06-25 09:58:17
【问题描述】:

大家好,我正在寻找使用 AppCompatActivity 的接口,因为它正在寻找 api 8 和 ListActivity 的向下兼容性接口,因为我正在寻找 ListActivity 的 onListItemClick 覆盖方法,所以我该怎么做。 例如

public class a extends AppCompatActivity {
    //I want to use onListItemClick override method of class b with this   //instance if you get me
}
public class b extends ListActivity(){
  @override
      public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
//some code here 
}

感谢您的支持!!

【问题讨论】:

  • 好吧,您可以 1) 添加包含 ListView 的布局 2) 在 onCreate list = findViewById('idOfYourList') 3) list.setOnItemClickListener(...) .. 您的 Activity 不必是 ListActivity 类型,以便能够显示列表和处理点击,常规的 Activity/AppCompatActivitiy 只需最少的工作量就可以做到这一点
  • 谢谢我已经选择了选项#3
  • 没问题,愉快的编码:)

标签: java android inheritance extend


【解决方案1】:

您需要进行的一些关键更改。

当从ListView 继承切换到AppCompatActivity 时,您需要进行一些更改来替换ListView 的内置内容。

  1. 您不能再拨打this 来获取ListView。您需要从视图中获取它。我建议创建一个这样的方法:

    protected ListView getListView() { return findViewById( android.R.id.list ); }
    

    注意:如果您的列表中没有 idlist,则需要更新它,但我建议尽可能使用 id list,因为它可以保持一致并且意味着您可以在多个 Activity 上使用此方法。

  2. 您不能再仅仅覆盖 onListItemClick 方法,因为它在 AppCompatActivity 上不存在,因此您需要创建自己的侦听器并将其设置为带有 setOnItemClickListerner 的列表并将其添加到您的 @ 987654333@。这是一个例子:

    getListView().setOnItemClickListener( new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick( AdapterView<?> parent, View view, int position, long id ) { 
        Cursor cursor = (Cursor) getListView().getItemAtPosition( position );
    
        String itemId = cursor.getString( cursor.getColumnIndex( "id" ) );
    
        Intent itemActivityIntent = new Intent( view.getContext(), Item.class );
    
        itemActivityIntent.putExtra( view.getContext().getPackageName() + ".itemId",  itemId );
    
        startActivity( itemActivityIntent);
      } ) 
    } );
    
  3. 您不能再在populateListView 中调用this.setListAdapter。相反,您需要获取 ListView 并调用 setAdapter,如下所示:

    getListView().setAdapter( adapter );
    

应该这样做。您可能需要对设置进行一些其他调整,但这些都是大调整。

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2022-07-28
    • 2020-12-11
    • 2022-08-21
    • 1970-01-01
    相关资源
    最近更新 更多