ricardorodriguez
ricardorodriguez

Reputation: 33

Start activity when clicking a child of a listview (Android Studio)

I made a dynamic list with custom XML rows (it contains some textviews and a "More info" button). When I click the more info button, I want to store the object associated with the row and go to another activity. How can I do that? Thanks!


MainActivity.java

TripAdapter adapter = new TripAdapter(this, trips);
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);

// How can I get the 'Trip' object when I click the more info button and then go to another activity?

TripAdapter.java

public class TripAdapter extends ArrayAdapter<Trip> {

public static Trip currentTrip;
public Context context;

public TripAdapter(Context context, ArrayList<Trip> trips){
    super(context, R.layout.row_trip, trips);
    this.context = context;
}

@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    // Get the data item for this position
    Trip trip = getItem(position);

    // Check if an existing view is being reused, otherwise inflate the view
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_trip, parent, false);
    }

    // Lookup view for data population
    ConstraintLayout MainContainer = (ConstraintLayout) convertView.findViewById(R.id.trip_container) ;
    TextView directions = (TextView) convertView.findViewById(R.id.directions);
    ImageView Image=(ImageView) convertView.findViewById(R.id.transportTypeIcon);
    TextView TransportType = (TextView) convertView.findViewById(R.id.transportTypeText);
    TextView scheduleTimeText = (TextView) convertView.findViewById(R.id.scheduleTimeText);
    TextView tickerPriceText = (TextView) convertView.findViewById(R.id.tickerPriceText);
    Button moreInfoBtn = (Button) convertView.findViewById(R.id.moreInfoBtn);
    ImageButton Timeicon = (ImageButton) convertView.findViewById(R.id.iconTime);
    ImageButton moneyicon = (ImageButton) convertView.findViewById(R.id.iconMoney);

    // set do tipo de transporte
    TransportType.setText(trip.getTransport_type());

    //set do preço
    DecimalFormat df2 = new DecimalFormat("#.##");
    tickerPriceText.setText(df2.format(trip.getPrice()) + "€");
    //moreinfo.setClickable(true);

    //set do tempo e demora
    scheduleTimeText.setText(trip.getTripTime());

    //set das directions
    String direction = trip.getOrigin_address() + "  ➝  " + trip.getDestiny_address();
    directions.setText(direction);

    //set da imagem do tipo de transporte

    // Return the completed view to render on screen
    return convertView;
}

}

Upvotes: 1

Views: 214

Answers (1)

Masoud Badrmiran
Masoud Badrmiran

Reputation: 441

It's better to use RecyclerView instead of ListView.

But in your case, you can simply use your context in adapter.

        moreInfoBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                context.startActivity(new Intent(context, YourActivity.class));
            }
        });

Upvotes: 3

Related Questions