如何从所选行中获取值(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();
我是 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();