簡體   English   中英

Android:如何獲取ListView中單擊的項目位置?

[英]Android: how to get the clicked item position in the ListView?

我的listview代碼如下:

CourseDataAdapter mCourseListAdapter = new CourseDataAdapter(this, R.layout.coursesearchviewrow, mCursor);

list.setAdapter(mCourseListAdapter);

list.setItemsCanFocus(false);

list.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3) {
        long index = arg0.getSelectedItemId();
        listDialog.dismiss();

    }

});

我使用我的自定義游標適配器,我的代碼在這里:

public class CourseDataAdapter extends ResourceCursorAdapter {
    private TextView courseType;
    private TextView courseDays;
    private TextView courseTime;

    public CourseDataAdapter(Context context, int layout, Cursor c) {
        super(context, layout, c);
    }

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

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        courseType = (TextView) view.findViewById(R.id.course_search_type_view);
        courseDays = (TextView) view.findViewById(R.id.course_search_days_view);
        courseTime = (TextView) view.findViewById(R.id.course_search_time_view);

        courseType.setText(cursor.getString(cursor.getColumnIndex(CourseDbAdapter.KEY_TYPE)));
        courseDays.setText(CourseDataHandler.daysStringProcessor(cursor.getInt(cursor.getColumnIndex(CourseDbAdapter.KEY_DAYS))));
        courseTime.setText(CourseDataHandler.courseTimeProcessor(cursor.getString(cursor.getColumnIndex(CourseDbAdapter.KEY_START_TIME)), cursor.getString(cursor.getColumnIndex(CourseDbAdapter.KEY_END_TIME))));
    }

}

但是,每次單擊列表中的項時,getSelectedItemId()方法都會返回無效值。

PS。 我嘗試了getSelectedItemPosition(),它還返回一個無效值,即-1。

那么如何才能獲得我點擊的項目的位置?

選擇的列表項與按下它的概念不同,在這種情況下不適用。 您已經將ID直接傳遞給了您,它是onItemClick方法的第4個參數。

文檔具有onItemClick的以下方法簽名:

public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)

這似乎是你正在尋找的:

position視圖在適配器中的位置。

我假設你想要這個位置,這樣你就可以得到存儲在與listview中該點相關聯的游標中的一些數據。 你應該做的是將onClickListener賦值移動到bindView方法中,如下所示:

 public void bindView(View view, Context context, Cursor cursor) {
    courseType = (TextView) view.findViewById(R.id.course_search_type_view);
    courseDays = (TextView) view.findViewById(R.id.course_search_days_view);
    courseTime = (TextView) view.findViewById(R.id.course_search_time_view);

    courseType.setText(cursor.getString(cursor.getColumnIndex(CourseDbAdapter.KEY_TYPE)));
    courseDays.setText(CourseDataHandler.daysStringProcessor(cursor.getInt(cursor.getColumnIndex(CourseDbAdapter.KEY_DAYS))));
    courseTime.setText(CourseDataHandler.courseTimeProcessor(cursor.getString(cursor.getColumnIndex(CourseDbAdapter.KEY_START_TIME)), cursor.getString(cursor.getColumnIndex(CourseDbAdapter.KEY_END_TIME))));



  view.setOnClickListener(new View.OnClickListener(){
    public void onClick(View view){
       //in here you now have access to the cursor
    }
  });   
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM