@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(conText).inflate(
R.layout.gridgoggle, parent, false);
holder = new ViewHolder();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.imageView1.setImageResource(Integer.parseInt((mData
.get(position).get("image"))));
holder.imageView1.setId(position);
holder.imageView1.setOnClickListener(new OnClickListener() {
public void onClick(View v)
{
int id = v.getId();
//here id is position.
Intent myIntent = new Intent(this, StopsScheduleActivity.class);
myIntent.putExtra("stop", id);
startActivity(myIntent);
}
});
return convertView;
}
Потому что вы передаете копию указателя. Чтобы изменить указатель, вам нужно что-то вроде этого:
void foo(int **ptr) //pointer to pointer
{
*ptr = new int[10]; //just for example, use RAII in a real world
}
или
void bar(int *& ptr) //reference to pointer (a bit confusing look)
{
ptr = new int[10];
}
, если вы пишете
int b = 0;
foo(b);
int foo(int a)
{
a = 1;
}
, вы не меняете 'b', потому что a является копией b
, если вы хотите изменить b, вам нужно будет передать адрес из b
int b = 0;
foo(&b);
int foo(int *a)
{
*a = 1;
}
одинаково для указателей:
int* b = 0;
foo(b);
int foo(int* a)
{
a = malloc(10); // here you are just changing
// what the copy of b is pointing to,
// not what b is pointing to
}
, поэтому для изменения, где b указывает, чтобы передать адрес:
int* b = 0;
foo(&b);
int foo(int** a)
{
*a = 1; // here you changing what b is pointing to
}
hth
Вы не можете изменить указатель, если вы не передадите его ссылкой (не const) или как двойной указатель. Передача по значению делает копию объекта, и любые изменения в объекте производятся копией, а не объектом. Вы можете изменить объект, на который указывает указатель, но не сам указатель, если вы проходите по значению.
Прочитайте этот вопрос, чтобы лучше понять различия в деталях . Когда пройти мимо ссылку и когда передать указатель в C ++?
Вы передаете указатель по значению.
Передайте ссылку на указатель, если вы хотите его обновить.
bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
*targetBubble = bubbles[i];
, и я передаю такой аргументclickOnBubble(mousePos, bubbles, &targetBubble);
– c0ntrol 7 August 2012 в 10:28