0

嗨,我需要在我的 onClick 中添加 Intent,在要与我的 Arraylist 连接的适配器中,并为 listview 中的不同项目传递不同的链接。我的代码在下面,所以我需要进行哪些更改?如何将 Intent 与我的适配器连接以及我需要使用哪些命令

 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);


            }
        });

    }
}

我的适配器

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;
    }

和我的 Word 课

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;
    }
}

当我尝试在我的 onItemClickListener 中添加 Toast 时它不起作用。为什么

4

2 回答 2

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);

     }
});
于 2018-06-29T18:12:32.973 回答
0
  1. 我强烈建议使用 recyclerView。阅读本文:RecyclerView 与 ListView

  2. 对于您的问题,请执行以下操作:

锻炼班:

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);


    }
}

现在,适配器

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;
}
于 2018-07-03T11:44:39.020 回答