我有一个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'行可以正常工作,但我需要对象。
答案 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等。