Android 如何在自定义适配器上实现onClickListener?
我正在学习制作一个简单的时间表管理应用程序。 我有一个课程列表。列表中的每个项目都是一个文本视图+一个删除按钮。我的列表项中的onClick侦听器未按预期工作。当我点击删除按钮时,它工作正常。但是,我想在用户单击列表项的textview时打开一些其他活动 代码: java(显示类列表的主要活动)Android 如何在自定义适配器上实现onClickListener?,android,xml,listview,android-listview,Android,Xml,Listview,Android Listview,我正在学习制作一个简单的时间表管理应用程序。 我有一个课程列表。列表中的每个项目都是一个文本视图+一个删除按钮。我的列表项中的onClick侦听器未按预期工作。当我点击删除按钮时,它工作正常。但是,我想在用户单击列表项的textview时打开一些其他活动 代码: java(显示类列表的主要活动) package com.example.android.mytimeline; 导入android.content.Intent; 导入android.os.Bundle; 导入android.supp
package com.example.android.mytimeline;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入java.util.ArrayList;
公共类ShowAll扩展了ActionBarActivity{
专用阵列适配器;
arraylistclassesdetail;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u show\u all);
这个.bindAdapter();
ListView ListView=(ListView)this.findViewById(R.id.class_列表);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
Log.v(“项目”,“点击”);
Intent Intent=new Intent(view.getContext(),ShowAllClicked.class);
ClassDetail ClassDetail=classesDetail.get(i);
Bundle=新Bundle();
bundle.putString(“CLASS\u NAME”,classDetail.CLASS\u NAME);
bundle.putString(“BUILDING”,classDetail.BUILDING);
bundle.putString(“周一开始”,classDetail.周一开始);
bundle.putString(“星期一结束”,classDetail.MONDAY结束);
bundle.putString(“周二开始”,classDetail.周二开始);
bundle.putString(“周二结束”,classDetail.周二结束);
bundle.putString(“星期三开始”,classDetail.星期三开始);
bundle.putString(“周三结束”,classDetail.周三结束);
bundle.putString(“星期四开始”,classDetail.星期四开始);
bundle.putString(“周四结束”,classDetail.周四结束);
bundle.putString(“FRIDAY\u START”,classDetail.FRIDAY\u START);
bundle.putString(“FRIDAY\u END”,classDetail.FRIDAY\u END);
意向。额外支出(捆绑);
星触觉(意向);
}
});
}
void bindapter(){
DBHelper db=新的DBHelper(this);
classesDetail=db.getClassesDetail();
ArrayList类=新的ArrayList();
对于(int i=0;i
activity_show_all.xml(ShowAll.java的xml布局)
CustomArrayAdapter.java(自定义阵列适配器文件)
package com.example.android.mytimeline;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.ListAdapter;
导入android.widget.TextView;
导入java.util.ArrayList;
/**
*由Aman Goel于2015年8月2日创建。
*/
公共类CustomArrayAdapter扩展BaseAdapter实现ListAdapter{
private ArrayList list=new ArrayList();
私人语境;
公共CustomArrayAdapter(ArrayList列表,上下文){
this.list=列表;
this.context=上下文;
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int-pos){
返回列表。获取(pos);
}
@凌驾
公共长getItemId(int-pos){
返回0;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图=转换视图;
如果(视图==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.list_项,空);
}
((TextView)view.findviewbyd(R.id.list_项)).setText(list.get(position));
Button deleteBtn=(Button)view.findviewbyd(R.id.delete);
deleteBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
DBHelper db=新的DBHelper(上下文);
db.deleteClass(list.get(position));
列表。删除(位置);
notifyDataSetChanged();
}
});
返回视图;
}
}
list_item.xml(每个列表视图的布局)
package com.example.android.mytimetable;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
public class ShowAll extends ActionBarActivity {
private ArrayAdapter<String> adapter ;
ArrayList <ClassDetail> classesDetail ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_all);
this.bindAdapter();
ListView listView = (ListView) this.findViewById(R.id.class_list);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.v("Item", "clicked");
Intent intent = new Intent(view.getContext(), ShowAllClicked.class);
ClassDetail classDetail = classesDetail.get(i);
Bundle bundle = new Bundle();
bundle.putString("CLASS_NAME", classDetail.class_name);
bundle.putString("BUILDING", classDetail.building);
bundle.putString("MONDAY_START", classDetail.monday_start);
bundle.putString("MONDAY_END", classDetail.monday_end);
bundle.putString("TUESDAY_START", classDetail.tuesday_start);
bundle.putString("TUESDAY_END", classDetail.tuesday_end);
bundle.putString("WEDNESDAY_START", classDetail.wednesday_start);
bundle.putString("WEDNESDAY_END", classDetail.wednesday_end);
bundle.putString("THURSDAY_START", classDetail.thursday_start);
bundle.putString("THURSDAY_END", classDetail.thursday_end);
bundle.putString("FRIDAY_START", classDetail.friday_start);
bundle.putString("FRIDAY_END", classDetail.friday_end);
intent.putExtras(bundle);
startActivity(intent);
}
});
}
void bindAdapter() {
DBHelper db = new DBHelper(this);
classesDetail = db.getClassesDetail();
ArrayList <String> classes = new ArrayList<>();
for(int i = 0 ; i < classesDetail.size() ; i++) {
Log.v("Adding ", classesDetail.get(i).class_name);
classes.add(classesDetail.get(i).class_name);
}
if(classes.size() == 0)
((TextView) this.findViewById(R.id.holiday)).setText(getString(R.string.noClass));
CustomArrayAdapter customArrayAdapter = new CustomArrayAdapter(classes, this);
((ListView) this.findViewById(R.id.class_list)).setAdapter(customArrayAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_show_all, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
return super.onOptionsItemSelected(item);
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.android.mytimetable.ShowAll"
android:orientation="vertical">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/class_list"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/holiday"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:id="@+id/list_item"
android:focusableInTouchMode="false"
android:clickable="false"
android:focusable="false"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/delete"
android:id="@+id/delete"/>
</LinearLayout>
TextView lst_tv=(TextView)view.findViewById(R.id.list_item);
lst_tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});