自定义适配器中的意图
Intent in Custom Adapter
嗨,我需要在我的 onClick 中添加 Intent,在适配器中与我的 Arraylist 连接,并为下面的 listview.My 代码中的不同项目传递不同的 link,所以我需要做哪些更改制作?如何将 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;
}
我的话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;
}
}
当我尝试在我的 onItemClickListener 中添加 Toast 时,它确实 work.Why
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);
}
});
我强烈推荐使用 recyclerView。读这个:RecyclerView vs. ListView
针对您的问题,请执行以下操作:
锻炼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);
}
}
现在,适配器
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;
}
嗨,我需要在我的 onClick 中添加 Intent,在适配器中与我的 Arraylist 连接,并为下面的 listview.My 代码中的不同项目传递不同的 link,所以我需要做哪些更改制作?如何将 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;
}
我的话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;
}
}
当我尝试在我的 onItemClickListener 中添加 Toast 时,它确实 work.Why
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);
}
});
我强烈推荐使用 recyclerView。读这个:RecyclerView vs. ListView
针对您的问题,请执行以下操作:
锻炼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);
}
}
现在,适配器
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;
}