如何从Activity调用ListView适配器的getItem(i)

时间:2017-03-31 18:28:54

标签: android listview

我有一个ListView适配器:

public class CartList extends BaseAdapter {
    // ...
    @Override
    public long getItemId(int i) { return i; }
    // ...

}

我有这个活动:

public class ListActivity extends AppCompatActivity {
    ListView lv_list;
    static ArrayList<CartEntity> lista1 = new ArrayList<CartEntity>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // my_code;
        lv_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                final int pos = position;
                CartEntity item = CartList.getItem(pos);
            }
        });
    }

显示此错误:

  

无法从静态引用非静态方法'getItem(int)'   上下文

我如何调用该方法来获取所选项目? 没有'getItem'行可以正常工作,但我需要对象。

2 个答案:

答案 0 :(得分:1)

了解java中的访问修饰符。您可以lista1调用ArrayList调用get {)方法获取该项CartEntity item = lista1.get(pos)

或者如果你仍然希望来自适配器的CartEntity使适配器成为本地变量或实例变量,你可以调用getItem()因为它是公共的

public class ListActivity extends AppCompatActivity {
ListView lv_list;
static ArrayList<CartEntity> lista1 = new ArrayList<CartEntity>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    // Create object from Adapter Class
    CartList cartAdapter = new CartList();

    // my_code;
    lv_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            final int pos = position;
            CartEntity item = cartAdapter.getItem(pos);
        }
    });
}

答案 1 :(得分:1)

您尚未创建CartList,您尝试在没有创建实际CartList对象的情况下使用该方法,因此列表将为空。您需要实例化它并将CartList对象分配给类中某处的变量。

例如:

public class ListActivity extends AppCompatActivity {
    private CartList mCartList = new CartList();

问题是,mCartList可能仍为空。你需要确保它有数据。我还将了解Java和面向对象编程中的访问修饰符,例如Public,Private,Protected,Static等。