【问题标题】:How to get position of item clicked on listview?如何获取在列表视图上单击的项目的位置?
【发布时间】:2011-09-17 02:58:08
【问题描述】:

我的活动代码获取 ListActivity 上项目的位置以更新检查到数据库的状态

public class ViewList extends ListActivity {
private ListViewAdapter lAdapter;   
DBAdapter db;
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    db = new DBAdapter(this);
    db.open();      
    Cursor cursor = db.fetchAllDeliveryItem();
    lAdapter = new ListViewAdapter(getApplicationContext(),cursor);     
    //Toast.makeText(getApplicationContext(), cursor.getString(1), Toast.LENGTH_SHORT).show();
    setListAdapter(lAdapter);

}
private class ListViewAdapter extends CursorAdapter{


@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        return super.getView(position, convertView, parent);
    }

public ListViewAdapter(Context context, Cursor c) {
    super(context, c);
    // TODO Auto-generated constructor stub
}




@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView tvListText = (TextView)view.findViewById(R.id.label);
    CheckBox cbListCheck = (CheckBox)view.findViewById(R.id.check);

    tvListText.setText(cursor.getString(cursor.getColumnIndex("itemname")));
    **cbListCheck.setChecked((cursor.getInt(cursor.getColumnIndex("delivered"))==0? false:true));
    cbListCheck.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
             db.updateItem(position);**


        }
    });

}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    return li.inflate(R.layout.receiverow, parent, false);
}

【问题讨论】:

    标签: android listview


    【解决方案1】:

    您需要在 ListView 上调用 setOnItemClickListener。它的回调函数包括作为参数单击的视图的位置。这是一个例子:

    myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
        public void onItemClick(AdapterView parent, View v, int position, long id){
    
            // DO STUFF HERE
    
        }
    });
    

    编辑:抱歉,我以为您使用的是 ListView 而不是 ListActivity。 ListActivity 更容易,因为您只需在 ListActivity 中实现以下方法:

    onListItemClick (ListView l, View v, int position, long id) 
    

    【讨论】:

    • 但我的布局不是列表视图
    • 然后在你的 ListActivity 中简单地实现:onListItemClick (ListView l, View v, int position, long id)。在文档中非常清楚:developer.android.com/reference/android/app/ListActivity.html
    • 我创建了一个 int 位置;并在 onListItemClick 方法上分配 this.position = position 但它返回 0 我点击的每个项目:(
    • 不不不!您不需要创建位置变量。当您单击列表中的项目时,列表对象会调用该 onItemClicked 方法并为该方法提供位置。如果这没有意义,我建议你买一本关于开始 android 开发的书。它将在这里更详细地解释这一点。
    • 谢谢!但是我想在单击项目 db.updateItem(position); 时调用此方法;我需要创建可用的:-??
    【解决方案2】:

    对于ListActivity,你可以覆盖ListActivity类中的方法onListItemClick

    【讨论】:

      【解决方案3】:

      当你扩展 ListActivity 时,你可以像这样覆盖 onListItemClick 方法:

      @Override
      protected void onListItemClick(ListView l, View v, int position, long id) {
          super.onListItemClick(l, v, position, id);
          // Do stuff
      }
      

      【讨论】:

        【解决方案4】:

        你应该实施

        onListItemClick

        并重写方法:

         @Override
            protected void onListItemClick(ListView l, View v, final int position, long id) {
                super.onListItemClick(l, v, position, id);  
        
        Log.i("the Item clicked is at position : ",  position);
        
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-30
          • 1970-01-01
          • 2019-05-21
          • 1970-01-01
          • 2017-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多