如何从所选行中获取值(android studio)

How to get value from the selected row (android studio)

我是 android 工作室的新手。

我有一个行列表,每一行都有一个按钮。单击该按钮后,它将能够更新数据库 (quickblox) 中的数据。但是,如果我不给它选择的 ID,quickblox 的更新代码将不起作用。我怎样才能得到这个ID?

这是我的代码:

public class ListAdapter1 extends BaseAdapter  {

public Context ctx;
private LayoutInflater layoutInflater;

public ListAdapter1(Context context) {
    this.layoutInflater = LayoutInflater.from(context);
}


@Override
public int getCount() {
    return connectorDA.getDataHolder().getNoteListSize();
}

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {
    return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder;

    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.activity_list_adapter1, null);
        viewHolder = new ViewHolder();
        viewHolder.namesTextView = (TextView) convertView.findViewById(R.id.name_textview);                
        viewHolder.distancesTextView = (TextView) convertView.findViewById(R.id.distances_textview);
        viewHolder.timesView = (TextView) convertView.findViewById(R.id.times_textview);
        viewHolder.accept = (Button) convertView.findViewById(R.id.buttonAccept);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }



    viewHolder.accept.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            final double userId = connectorDA.getDataHolder().getSignInUserId();
            HashMap<String, Object> fields = new HashMap<String, Object>();
            fields.put(pass_taxiID, userId);

            QBCustomObject qbCustomObject = new QBCustomObject();
            qbCustomObject.setClassName(class_passenger);
            qbCustomObject.getId();   // here i should put the selected id
            qbCustomObject.setFields(fields);


            QBCustomObjects.updateObject(qbCustomObject, new QBEntityCallbackImpl<QBCustomObject>() {
                @Override
                public void onSuccess(QBCustomObject qbCustomObject, Bundle bundle) {

                    passengerDA.getDataHolder().addPassToList(qbCustomObject);
                    qbCustomObject.getId();
                    goToTrack();
                }

                @Override
                public void onError(List<String> errors) {

                    //DialogUtils.showLong(BaseActivity, errors.get(0));
                }
            });

        }
    });

    applyDistances(viewHolder.distancesTextView, position);
    applyTimes(viewHolder.timesView, position);
    applyId(viewHolder.namesTextView, position);

    return convertView;
}

private static class ViewHolder {

    TextView namesTextView;
    TextView distancesTextView;
    TextView timesView;
    Button accept;
}



private void applyId(TextView status, int position) {
    status.setText(connectorDA.getDataHolder().getId(position));
}

private void applyDistances(TextView status, int position) {
    status.setText(connectorDA.getDataHolder().getDistances(position));
}

private void applyTimes(TextView date, int position) {
    date.setText(connectorDA.getDataHolder().getTimes(position));
}

public void goToTrack()
{
    Intent intent = new Intent(ctx,MapsActivityTrack.class);
    ctx.startActivity(intent);


}

}

我的意图也没有奏效。如果我按下按钮,它会不幸停止,因为我的意图 returns 一个空异常。

这里可以使用View Tag(标签本质上是可以与view相关联的额外信息)。

viewHolder.accept.setTag(connectorDA.getDataHolder().getId(position));

并且在您的 onClick 方法中:

@Override
public void onClick(View v) {
     String id = (String)v.getTag();
}

如果你想获取特定位置的 id,在你的适配器中你应该覆盖下面的 2 个函数:

  • 第一个@Override public Object getItem(int i) { return null; }

这个方法你应该 return 你的模型中的对象在位置 i 例如,如果你的模型是一个对象列表,它被命名为数据,你应该 return data.get(i);

  • 第二 @Override public long getItemId(int i) { return 0; }

此方法应该 return 位置 i 的对象的 ID,通常 return i; 但如果您有其他 ID 作为您的实现,您应该 return 您的 ID。 示例:return data.get(i).getId();