2017-03-31 51 views
-2

调用ListView控件适配器的getItem(我)我有一个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); 
      } 
     }); 
    } 

这表明了这个错误:

Non-static method 'getItem(int)' cannot be referenced from a static context

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

+0

你在哪里填充你的'ListView'并在哪里创建了你的适配器的对象填充你的列表? – Geek

+0

了解java中的访问修饰符。 ''onOptionsItemSelected(MenuItem item)''中带有'CartList adapter = new CartList(this,lista1)的 –

+0

; lv_list.setAdapter(adapter);' –

回答

1

了解java中的访问修饰符。您可以从ArrayList得到lista1调用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); 
     } 
    }); 
} 
+0

谢谢!有用!我会去读。 –

1

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

例如:

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

的问题是,仍mCartList可以是空的。你需要确保它有数据。我还会学习Java和面向对象编程中的访问修饰符,比如Public,Private,Protected,Static等。