我有两个OnClickListeners在我的ArrayAdapter under View。
我有onClick行和onClick按钮,两者都在同一个Listview。我想把它们结合起来。为两者创建一个OnClickListener。当点击时,它们都进入相同的Intent/页面。
不知道如何做到这一点,而不复制我的代码。
提前感谢。
public class ListAdapter extends ArrayAdapter {
private List<ExerciseListModel> exModelList;
private int resource;
private LayoutInflater inflater;
public ListAdapter(Context context, int resource, List<ExerciseListModel> objects) {
super(context, resource, objects);
exModelList = objects;
this.resource = resource;
inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(resource, null);
holder.exTitle = (TextView)convertView.findViewById(R.id.myTitle);
holder.exBody = (TextView)convertView.findViewById(R.id.myBody);
holder.exId = (TextView)convertView.findViewById(R.id.myId);
holder.exDone = (TextView)convertView.findViewById(R.id.myCount);
holder.exIcon = (ImageView)convertView.findViewById(R.id.myIcon);
holder.btnStart = (Button)convertView.findViewById(R.id.btnStart);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//onClick Row
convertView.setOnClickListener(new View.OnClickListener() {
public void onClick(final View v) {
String nid = exModelList.get(position).getNid();
String title = exModelList.get(position).getTitle();
String body = exModelList.get(position).getBody();
Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
intent.putExtra("nid", nid);
intent.putExtra("title", title);
intent.putExtra("body", body);
startActivity(intent);
}
});
//onClick Button
holder.btnStart.setOnClickListener(new View.OnClickListener() {
public void onClick(final View v) {
String nid = exModelList.get(position).getNid();
String title = exModelList.get(position).getTitle();
String body = exModelList.get(position).getBody();
Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
intent.putExtra("nid", nid);
intent.putExtra("title", title);
intent.putExtra("body", body);
startActivity(intent);
}
});
holder.exId.setText("ID: " + exModelList.get(position).getNid());
holder.exBody.setText(exModelList.get(position).getBody());
holder.exTitle.setText(exModelList.get(position).getTitle());
if(exModelList.get(position).getExercise_done().equals("[]")){
holder.exDone.setText(exercise_not_done);
holder.exIcon.setImageResource(R.drawable.exercise_not_started);
}else{
String exercise_count = exModelList.get(position).getExercise_done();
String ex_done = exercise_done + " " + exercise_count + " " + exercise_times_done;
holder.exDone.setText(ex_done);
holder.exIcon.setImageResource(R.drawable.exercise_started);
}
return convertView;
}
class ViewHolder{
private TextView exTitle;
private TextView exBody;
private TextView exId;
private ImageView exIcon;
private TextView exDone;
private Button btnStart;
}
}
在你的activity/Fragment(在你声明ListView的地方)
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
intent.putExtra("nid", nid);
intent.putExtra("title", title);
intent.putExtra("body", body);
startActivity(intent);
}}
这段代码可以帮助你,定义OnClicklistener方法,以两个视图和按钮。
public class ListAdapter extends ArrayAdapter {
private List<ExerciseListModel> exModelList;
private int resource;
private LayoutInflater inflater;
public ListAdapter(Context context, int resource, List<ExerciseListModel> objects) {
super(context, resource, objects);
exModelList = objects;
this.resource = resource;
inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(resource, null);
holder.exTitle = (TextView)convertView.findViewById(R.id.myTitle);
holder.exBody = (TextView)convertView.findViewById(R.id.myBody);
holder.exId = (TextView)convertView.findViewById(R.id.myId);
holder.exDone = (TextView)convertView.findViewById(R.id.myCount);
holder.exIcon = (ImageView)convertView.findViewById(R.id.myIcon);
holder.btnStart = (Button)convertView.findViewById(R.id.btnStart);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//onClick Row
convertView(OnClickListener);
//onClick Button
holder.btnStart(OnClickListener)
holder.exId.setText("ID: " + exModelList.get(position).getNid());
holder.exBody.setText(exModelList.get(position).getBody());
holder.exTitle.setText(exModelList.get(position).getTitle());
if(exModelList.get(position).getExercise_done().equals("[]")){
holder.exDone.setText(exercise_not_done);
holder.exIcon.setImageResource(R.drawable.exercise_not_started);
}else{
String exercise_count = exModelList.get(position).getExercise_done();
String ex_done = exercise_done + " " + exercise_count + " " + exercise_times_done;
holder.exDone.setText(ex_done);
holder.exIcon.setImageResource(R.drawable.exercise_started);
}
return convertView;
}
public void OnClickListener() {
String nid = exModelList.get(position).getNid();
String title = exModelList.get(position).getTitle();
String body = exModelList.get(position).getBody();
Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
intent.putExtra("nid", nid);
intent.putExtra("title", title);
intent.putExtra("body", body);
startActivity(intent);
}
class ViewHolder{
private TextView exTitle;
private TextView exBody;
private TextView exId;
private ImageView exIcon;
private TextView exDone;
private Button btnStart;
}
}
如果两个onClickListener都有相同的功能,那么你也不需要将onClickListener添加到按钮中。只需删除此侦听器并仅将其添加到行中。它会工作,即使你点击按钮。只需执行如下操作
public class ListAdapter extends ArrayAdapter {
private List<ExerciseListModel> exModelList;
private int resource;
private LayoutInflater inflater;
public ListAdapter(Context context, int resource, List<ExerciseListModel> objects) {
super(context, resource, objects);
exModelList = objects;
this.resource = resource;
inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(resource, null);
holder.exTitle = (TextView)convertView.findViewById(R.id.myTitle);
holder.exBody = (TextView)convertView.findViewById(R.id.myBody);
holder.exId = (TextView)convertView.findViewById(R.id.myId);
holder.exDone = (TextView)convertView.findViewById(R.id.myCount);
holder.exIcon = (ImageView)convertView.findViewById(R.id.myIcon);
holder.btnStart = (Button)convertView.findViewById(R.id.btnStart);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//onClick Row
convertView.setOnClickListener(new View.OnClickListener() {
public void onClick(final View v) {
String nid = exModelList.get(position).getNid();
String title = exModelList.get(position).getTitle();
String body = exModelList.get(position).getBody();
Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
intent.putExtra("nid", nid);
intent.putExtra("title", title);
intent.putExtra("body", body);
startActivity(intent);
}
});
holder.exId.setText("ID: " + exModelList.get(position).getNid());
holder.exBody.setText(exModelList.get(position).getBody());
holder.exTitle.setText(exModelList.get(position).getTitle());
if(exModelList.get(position).getExercise_done().equals("[]")){
holder.exDone.setText(exercise_not_done);
holder.exIcon.setImageResource(R.drawable.exercise_not_started);
}else{
String exercise_count = exModelList.get(position).getExercise_done();
String ex_done = exercise_done + " " + exercise_count + " " + exercise_times_done;
holder.exDone.setText(ex_done);
holder.exIcon.setImageResource(R.drawable.exercise_started);
}
return convertView;
}
class ViewHolder{
private TextView exTitle;
private TextView exBody;
private TextView exId;
private ImageView exIcon;
private TextView exDone;
private Button btnStart;
}
}
编辑:或者您可以遵循@GiuseppeLabanca的代码并从适配器中删除onClickListeners