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