Android 在listItem onclick操作中实现按钮onclick
我从数据库中选取了一些数据,并将它们显示在列表视图中。 在我的listview中,每个列表项都有一个textview和一个按钮。 我希望每当单击listitem的按钮时,它都会显示listitem相应文本视图中的文本 实现列表项的按钮操作的mycode是这样的Android 在listItem onclick操作中实现按钮onclick,android,android-listview,Android,Android Listview,我从数据库中选取了一些数据,并将它们显示在列表视图中。 在我的listview中,每个列表项都有一个textview和一个按钮。 我希望每当单击listitem的按钮时,它都会显示listitem相应文本视图中的文本 实现列表项的按钮操作的mycode是这样的 final TestAdapter mDbHelper = new TestAdapter(this); mDbHelper.createDatabase(); EditText
final TestAdapter mDbHelper = new TestAdapter(this);
mDbHelper.createDatabase();
EditText word_from_box;
//ListView mylist ;
//SimpleAdapter adapter;
word_from_box=(EditText) findViewById(R.id.editText1);
final ListView listView = (ListView) findViewById(R.id.mylist);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),"Clicked a list item ", Toast.LENGTH_SHORT).show();
Button fav_b=(Button) findViewById(R.id.fav_btn);
fav_b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),"clicked on button on a listview ", Toast.LENGTH_SHORT).show();
}
});
}
});
您可以在适配器类的
getView
中执行此操作。在adapters getView中为您的按钮实现OnClickListener
在getView中
holder.button.setOnClickListener(mClickListener);
holder.button.setTag(holder.tv.getText());
然后
编辑:
自定义适配器
public class CustomAdapter extends BaseAdapter
{
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
LayoutInflater inflater;
Context mContext;
ArrayList<HashMap<String,String>> items;
public CustomAdapter(Context context, ArrayList<HashMap<String,String>> List) {
// TODO Auto-generated constructor stub
inflater = LayoutInflater.from(context);
mContext = context;
items= List;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null)
{
convertView = inflater.inflate(R.layout.list_item, parent,false);
holder = new ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.textView1);
holder.tv2 = (TextView) convertView.findViewById(R.id.textView2);
holder.b1 = (Button) convertView.findViewById(R.id.button1);
holder.b2 = (Button) convertView.findViewById(R.id.button2);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
HashMap<String,String> map = items.get(position);
holder.tv.setText(map.get("key_word"));
holder.tv2.setText(map.get("key_meaning"));
holder.b1.setOnClickListener(mClickListener);
holder.b1.setTag(holder.tv.getText());
holder.b2.setOnClickListener(mClickListener);
holder.b2.setTag(holder.tv2.getText());
return convertView;
}
private OnClickListener mClickListener = new OnClickListener() {
public void onClick(View v) {
switch(v.getId())
{
case R.id.button1 :
Toast.makeText(mContext,"Text is"+v.getTag(),Toast.LENGTH_SHORT).show();
break;
case R.id.button2 :
Toast.makeText(mContext,"Text is"+v.getTag(),Toast.LENGTH_SHORT).show();
break;
}
}
};
static class ViewHolder
{
TextView tv,tv2;
Button b1,b2;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
}
公共类CustomAdapter扩展了BaseAdapter
{
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回items.size();
}
充气机;
语境;
数组列表项;
公共CustomAdapter(上下文上下文,ArrayList列表){
//TODO自动生成的构造函数存根
充气器=充气器。从(上下文);
mContext=上下文;
项目=列表;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
视窗座;
if(convertView==null)
{
convertView=充气机。充气(R.layout.list_项,父项,false);
holder=新的ViewHolder();
holder.tv=(TextView)convertView.findViewById(R.id.textView1);
holder.tv2=(TextView)convertView.findViewById(R.id.textView2);
holder.b1=(按钮)convertView.findViewById(R.id.button1);
holder.b2=(按钮)convertView.findViewById(R.id.button2);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
HashMap map=items.get(位置);
holder.tv.setText(map.get(“关键字”);
holder.tv2.setText(map.get(“key_的意思”);
holder.b1.setOnClickListener(mClickListener);
holder.b1.setTag(holder.tv.getText());
holder.b2.setOnClickListener(mClickListener);
holder.b2.setTag(holder.tv2.getText());
返回视图;
}
私有OnClickListener mClickListener=新OnClickListener(){
公共void onClick(视图v){
开关(v.getId())
{
案例R.id.button1:
Toast.makeText(mContext,“文本为”+v.getTag(),Toast.LENGTH_SHORT).show();
打破
案例R.id.按钮2:
Toast.makeText(mContext,“文本为”+v.getTag(),Toast.LENGTH_SHORT).show();
打破
}
}
};
静态类视窗夹
{
文本视图电视,tv2;
按钮b1、b2;
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
}
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="16dp"
android:layout_marginTop="36dp"
android:text="TextView" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textView1"
android:layout_marginLeft="30dp"
android:layout_toRightOf="@+id/textView1"
android:text="Button1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_marginLeft="25dp"
android:layout_toRightOf="@+id/button1"
android:text="Button2" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button1"
android:layout_toLeftOf="@+id/button1"
android:text="TextView" />
</RelativeLayout>
您是否使用自定义的适配器
?如果每个列表项中有2个按钮会怎样?@DarkenShooter您可以使用开关(v.getId)
@DarkenShooterholder.button2.setOnClickListener(McClickListener)在onClick中使用开关盒
然后public void onClick(View v){switch(v.getId()){case R.id.button1:…Toast.makeText(getApplicationContext(),“Text为”+v.getTag(),Toast.LENGTH_SHORT).show()}
@DarkenShooter使用break,然后使用case R.id.button2 break。因此R.id.button1是按钮1单击,R.id.button2将是按钮2单击。我不知道如何在addapter类中“获取视图”?你能帮我吗??
private OnClickListener mClickListener = new OnClickListener() {
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"Text is"+v.getTag(),Toast.LENGTH_SHORT).show();
}
};
CustomAdapter cus = new CustomAdapter(MainActivity.this, list_of_wordmeanings);
listview.setAdapter(cus);
public class CustomAdapter extends BaseAdapter
{
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
LayoutInflater inflater;
Context mContext;
ArrayList<HashMap<String,String>> items;
public CustomAdapter(Context context, ArrayList<HashMap<String,String>> List) {
// TODO Auto-generated constructor stub
inflater = LayoutInflater.from(context);
mContext = context;
items= List;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null)
{
convertView = inflater.inflate(R.layout.list_item, parent,false);
holder = new ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.textView1);
holder.tv2 = (TextView) convertView.findViewById(R.id.textView2);
holder.b1 = (Button) convertView.findViewById(R.id.button1);
holder.b2 = (Button) convertView.findViewById(R.id.button2);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
HashMap<String,String> map = items.get(position);
holder.tv.setText(map.get("key_word"));
holder.tv2.setText(map.get("key_meaning"));
holder.b1.setOnClickListener(mClickListener);
holder.b1.setTag(holder.tv.getText());
holder.b2.setOnClickListener(mClickListener);
holder.b2.setTag(holder.tv2.getText());
return convertView;
}
private OnClickListener mClickListener = new OnClickListener() {
public void onClick(View v) {
switch(v.getId())
{
case R.id.button1 :
Toast.makeText(mContext,"Text is"+v.getTag(),Toast.LENGTH_SHORT).show();
break;
case R.id.button2 :
Toast.makeText(mContext,"Text is"+v.getTag(),Toast.LENGTH_SHORT).show();
break;
}
}
};
static class ViewHolder
{
TextView tv,tv2;
Button b1,b2;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="16dp"
android:layout_marginTop="36dp"
android:text="TextView" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textView1"
android:layout_marginLeft="30dp"
android:layout_toRightOf="@+id/textView1"
android:text="Button1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_marginLeft="25dp"
android:layout_toRightOf="@+id/button1"
android:text="Button2" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button1"
android:layout_toLeftOf="@+id/button1"
android:text="TextView" />
</RelativeLayout>