The View v in onListItemClick represents the ViewGroup for the row you've clicked. Therefore, you don't need the getParent method. Change your code as follows:
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
String text;
text=((TextView) v.findViewById(R.id.text2)).getText().toString();
Toast.makeText(this, text+" !here(description)", Toast.LENGTH_LONG).show();
}
The parentView, as you have it, would refer to the entire ListView's view hierarchy. Within that, there would be multiple Views that each contain a TextView with id == R.id.text2. I would guess that findViewById would just grab the first one it finds in that hierarchy, which is why it's always returning the value from the first row.