Java 自定义适配器中的意图

Java 自定义适配器中的意图,java,android,custom-arrayadapter,Java,Android,Custom Arrayadapter,您好,我需要在onClick中添加Intent,在适配器中添加Intent以连接我的Arraylist,并在listview中传递不同项的different链接。下面是我的代码,我需要做哪些更改?如何将Intent与适配器连接,以及需要使用哪些命令 package com.example.android.extremebiceps; import android.app.Activity; import android.content.Intent; import android.suppo

您好,我需要在onClick中添加Intent,在适配器中添加Intent以连接我的Arraylist,并在listview中传递不同项的different链接。下面是我的代码,我需要做哪些更改?如何将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);


            }
        });

    }
}
当我试图在我的监听器中添加Toast时,它不起作用;
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);

     }
});
setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 public void onItemClick(AdapterView父视图、视图视图、整型位置、长l){ Word=训练。获取(位置); Intent in=新的Intent(锻炼。本次,下一次触觉。课堂); in.putExtra(“Word”,wokouts.get(position.yourMethod()); 星触觉(in); } });
  • 我强烈推荐使用recyclerView。请阅读以下内容:

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

  • 训练班:

    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;
    导入android.app.Activity;
    导入android.content.Intent;
    导入android.support.v7.app.AppActivity;
    导入android.os.Bundle;
    导入android.view.view;
    导入android.widget.AdapterView;
    导入android.widget.ArrayAdapter;
    导入android.widget.LinearLayout;
    导入android.widget.ListView;
    导入android.widget.TextView;
    导入android.widget.Toast;
    导入java.util.ArrayList;
    公共课锻炼扩展了体育活动{
    公共接口WorkoutCallBack{//添加此回调,我将通知您的训练课程按钮已按下
    void onButtonPressed(String字段);//不使用String,而使用您想要改变意图的任何字段
    }
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\U训练);
    //克雷恩杰·阿拉贾
    最终ArrayList训练=新建ArrayList();
    增加(新词(“workout1”,R.layout.activity_main));
    增加(新词(“workout2”,R.layout.activity_main));
    增加(新词(“workout3”,R.layout.activity_main));
    增加(新词(“workout4”,R.layout.activity_main));
    增加(新词(“workout5”,R.layout.activity_main));
    //克雷兰杰·普拉切尼·特努特·波齐齐耶
    //将workoutCallBack作为参数添加到适配器中
    WordAdapter=新WordAdapter(此,训练,新训练回调{
    @凌驾
    已按下公用void on按钮(字符串字段){
    //在这里测试你的领域,并给出支持者的意图
    if(字段等于(“x”)){
    //初衷
    }else if(字段等于(“y”)){
    //第二意图等
    }
    }
    });
    ListView ListView=(ListView)findViewById(R.id.list);
    setAdapter(适配器);
    }
    }
    
    现在,适配器

    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;
    }
    
    package com.example.android.extremebiceps;
    导入android.app.Activity;
    导入android.support.annotation.NonNull;
    导入android.support.annotation.Nullable;
    导入android.view.LayoutInflater;
    导入android.view.view;
    导入android.view.ViewGroup;
    导入android.widget.ArrayAdapter;
    导入android.widget.Button;
    导入android.widget.TextView;
    导入java.util.ArrayList;
    公共类WordAdapter扩展了ArrayAdapter{
    private WorkoutCallBack WorkoutCallBack;//回调的局部变量
    public WordAdapter(活动上下文、ArrayList训练、WorkoutCallBack WorkoutCallBack){//在适配器的参数中添加回调
    //这里,我们为上下文和列表初始化ArrayAdapter的内部存储。
    //第二个参数在ArrayAdapter填充单个TextView时使用。
    //因为这是两个TextView和一个ImageView的自定义适配器,所以适配器不是
    //我们将使用第二个参数,所以它可以是任何值。
    this.workoutCallBack=workoutCallBack;//将回调保存在局部变量中
    超级(上下文、0、训练);
    }
    @非空
    @凌驾
    公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
    //检查现有视图是否正在重新使用,否则会膨胀视图
    View listItemView=convertView;
    如果(listItemView==null){
    listItemView=LayoutFlater.from(getContext()).inflate(
    R.layout.list_项,父项,false);
    }
    Word currentWord=getItem(位置);
    //纳兹按钮
    Button buttonView=(Button)listItemView.findViewById(R.id.Button1);
    //uzmi tekst iz buttona
    buttonView.setText(currentWord.getDefaultButton());
    //将click listener添加到按钮
    buttonView.setOnClickListener(新视图.OnClickListener{
    @凌驾
    公共void onClick(视图v){
    workoutCallBack.onButtonClicked(currentWord.getDefaultButton())
    }
    });
    返回listItemView;
    }
    
    发布你的适配器,我会给你一个完整的snipet我刚刚发布了完整的snipet,所以请帮助:你想在适配器的按钮视图上设置点击侦听器吗?问题2,你想基于什么?我想基于word类中的字段?是的,可能吗?以及2.是word类中的字段或我需要吗我的问题是:我可以在我的ArayStuding训练中添加不同的意图吗?添加,就像我对字符串所做的那样…所以当我的第一个按钮调用intent1时,第二个按钮调用calintent2时,等等?
    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;
    }