0

Hi i Need to add Intent in my onClick,in adapter to be connected with my Arraylist,and pass diferent link for diferent item in listview.My code is below so what changes do i need to make?How can i connect Intent with my adapter and which commands i need to use

 package com.example.android.extremebiceps;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;



public class Workout extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_workout);

        //kreirenje arraja
        final ArrayList<Word> workouts = new ArrayList<Word>();
        workouts.add(new Word("workout1",R.layout.activity_main));
        workouts.add(new Word("workout2",R.layout.activity_main));
        workouts.add(new Word("workout3",R.layout.activity_main));
        workouts.add(new Word("workout4",R.layout.activity_main));
        workouts.add(new Word("workout5",R.layout.activity_main));




        // kreiranje variable za pracenje trenutne pozicije


        WordAdapter adapter=new WordAdapter(this,workouts);


        ListView listView = (ListView) findViewById(R.id.list);

        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long l) {

                Word word = workouts.get(position);


            }
        });

    }
}

My Adapter

package com.example.android.extremebiceps;

import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;

public class WordAdapter extends ArrayAdapter<Word> {
    public WordAdapter(Activity context, ArrayList<Word> Workouts) {
        // Here, we initialize the ArrayAdapter's internal storage for the context and the list.
        // the second argument is used when the ArrayAdapter is populating a single TextView.
        // Because this is a custom adapter for two TextViews and an ImageView, the adapter is not
        // going to use this second argument, so it can be any value. Here, we used 0.
        super(context, 0, Workouts);
    }
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        // Check if the existing view is being reused, otherwise inflate the view
        View listItemView = convertView;
        if (listItemView == null) {
            listItemView = LayoutInflater.from(getContext()).inflate(
                    R.layout.list_item, parent, false);
        }
        Word currentWord = getItem(position);

        //nadzi button
        Button buttonView = (Button) listItemView.findViewById(R.id.Button1);
        //uzmi tekst iz buttona
        buttonView.setText(currentWord.getDefaultButton());




        return listItemView;
    }

and my Word class

package com.example.android.extremebiceps;


public class Word {

    //trazenje buttona
    private String mDefaultButton;

    //Trazenje intenta
    private int mLink;

    public Word(String DefaultButton,int Link){
        mDefaultButton=DefaultButton;
        mLink=Link;
    }

    //uzimanje buttona
    public String getDefaultButton(){
        return mDefaultButton;
    }
    //uzimanje intenta
    public int getLink(){
        return mLink;
    }
}

And when i try to add Toast in my onItemClickListener it doeesnt work.Why

Bata Kos
  • 85
  • 8

2 Answers2

1
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long l) {
        Word word = workouts.get(position);
        Intent in = new Intent(Workout.this, NextActivity.class);
        in.putExtra("Word", wokouts.get(position).yourMethod());
        startActivity(in);

     }
});
Raj
  • 2,997
  • 2
  • 12
  • 30
0
  1. i would highly recommend using recyclerView. Read this: RecyclerView vs. ListView

  2. For your issue do this:

Workout class:

package com.example.android.extremebiceps;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;



public class Workout extends AppCompatActivity {

    public interface WorkoutCallBack{  //ADD this callback that ill announce your workout class that the button was pressed
        void onButtonPressed(String field);  //insted of string put whatever field you want to alter you intent
    }

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_workout);

        //kreirenje arraja
        final ArrayList<Word> workouts = new ArrayList<Word>();
        workouts.add(new Word("workout1",R.layout.activity_main));
        workouts.add(new Word("workout2",R.layout.activity_main));
        workouts.add(new Word("workout3",R.layout.activity_main));
        workouts.add(new Word("workout4",R.layout.activity_main));
        workouts.add(new Word("workout5",R.layout.activity_main));




        // kreiranje variable za pracenje trenutne pozicije

        //add the workoutCallBack as a parameter in the adapter
        WordAdapter adapter=new WordAdapter(this,workouts, new WorkoutCallBack{

            @Override
            public void onButtonPressed(string field){

                //here test your field and give the propper intent
                if(field.equals("x")){
                    //first intent
                }else if(field.equals("y")){
                    //second intent, etc
                }
            }
        });


        ListView listView = (ListView) findViewById(R.id.list);

        listView.setAdapter(adapter);


    }
}

Now, the adapter

package com.example.android.extremebiceps;

import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;

public class WordAdapter extends ArrayAdapter<Word> {

    private WorkoutCallBack workoutCallBack; //local variable of the callback

    public WordAdapter(Activity context, ArrayList<Word> Workouts, WorkoutCallBack workoutCallBack) {//add the callback in the parameters of the adapter
        // Here, we initialize the ArrayAdapter's internal storage for the context and the list.
        // the second argument is used when the ArrayAdapter is populating a single TextView.
        // Because this is a custom adapter for two TextViews and an ImageView, the adapter is not
        // going to use this second argument, so it can be any value. Here, we used 0.
        this.workoutCallBack=workoutCallBack; //save the callback in the local variable
        super(context, 0, Workouts);
    }
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        // Check if the existing view is being reused, otherwise inflate the view
        View listItemView = convertView;
        if (listItemView == null) {
            listItemView = LayoutInflater.from(getContext()).inflate(
                    R.layout.list_item, parent, false);
        }
        Word currentWord = getItem(position);

        //nadzi button
        Button buttonView = (Button) listItemView.findViewById(R.id.Button1);
        //uzmi tekst iz buttona
        buttonView.setText(currentWord.getDefaultButton());

        //add click listener to the button
        buttonView.setOnClickListener(new View.OnClickListener{
            @Override
            public void onClick(View v) {
                workoutCallBack.onButtonClicked(currentWord. getDefaultButton())
            }
        });


        return listItemView;
}
Alexandru Sandu
  • 314
  • 2
  • 13