0

チェックボックスとテキストアイテムを持つリストビュー用に1つのカスタムアダプタを実装しました。オーバーライドされたパラメータを使用して位置を取得できます。しかし、私のリスト行のIDを取得する方法は?

以下はカスタムアダプタのコードです-

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        if (rowView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            rowView = inflater.inflate(R.layout.reminder_row, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.text = (TextView) rowView.findViewById(R.id.reminderRowTextId);
            viewHolder.reminderCheckBox = (CheckBox) rowView.findViewById(R.id.CheckBoxId);
            rowView.setTag(viewHolder);
        }

        final int pos = position;
        final ViewHolder holder = (ViewHolder) rowView.getTag();
        int idRow = holder.text.getId();
        Log.i(TAG, "id of item selected-->" + idRow); <<<<<<------- IT IS GIVING SOME VALUE LIKE 2030771-------->>>
        String s = names[position];
        holder.text.setText(s);

        holder.reminderCheckBox.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (holder.reminderCheckBox.isChecked()) {
                    Toast.makeText(getContext(), "pos-->chkd" + pos, Toast.LENGTH_SHORT).show();
                    long longPos = (long)pos;
                    dbHelper.completeTask(longPos + 1);

                } else {
                    Toast.makeText(getContext(), "pos-->un--chkd" + pos, Toast.LENGTH_SHORT).show();
                }
            }
        });

        holder.text.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "TEXT CLICKED" + pos , Toast.LENGTH_SHORT).show();

                Intent intent = new Intent(context,ReminderModificationActivity.class);
                long longPos = (long)pos;
                intent.putExtra(TasksDBAdapter.KEY_ROWID, longPos + 1);
                Log.i(TAG, "row clickd --> " + longPos);
                ((Activity) context).startActivityForResult(intent, ACTIVITY_EDIT);
            }
        });
        return rowView;
    }

1.1を編集

public static final String KEY_TITLE = "title";                  
    public static final String KEY_BODY = "body";
    public static final String KEY_DATE_TIME = "reminder_date_time"; 
    public static final String KEY_ROWID = "_id";                
    public static final String KEY_IS_COMPLETE = "is_complete";
    private static final String TAG = "TasksDBAdapter";

private static final String DATABASE_CREATE =                        
           "create table " + DATABASE_TABLE + " ("
                   + KEY_ROWID + " integer primary key autoincrement, "
                   + KEY_IS_COMPLETE + " boolean default 'false', "
                   + KEY_TITLE + " text not null, " 
                   + KEY_BODY + " text , " 
                   + KEY_DATE_TIME + " text);"; 

マークされた線をご覧ください。IDの取得方法を教えてください。私はアンドロイドを学んでいるので、詳しく説明してください。よろしくお願いします、レイ

4

1 に答える 1

1

ドキュメントによると、属性に関連付けられた値を返す、を呼び出しgetId()ています。この値は自動生成され、おそらくと同じです。TextViewandroid:idR.id.reminderRowTextId

ViewHolder基本的に、クラスに意味のあるIDを実際に設定しているわけではありません。別のメンバー変数を追加して、必要なものを保存するだけです。

詳述すると、アダプターを使用してバッキングリスト/配列のサイズを記述し、各要素のビューを提供します。これを適切に行うには、とを実装getView()getItem()ます。

getItem()のパラメータである位置を取りますgetView()。に渡すとpositiongetItem()SQLiteからアイテムが提供されます。そのオブジェクトのIDを取得し、に変数を設定しますViewHolder

于 2012-11-16T16:28:34.737 に答える