当前位置:编程学习 > wap >>

向ListView动态添加Button,那ListView里面Button的点击事件 如何实现 ??

RT

我用如下的代码来测试:

package com.example.zclistview01;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.*;

public class MainActivity extends Activity
{
ArrayList<Button> FarrlistBtns = null;
ArrayAdapter<Button> FarrAdapter = null;

ListView FlistView01 = null;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// ***
FarrlistBtns = new ArrayList<Button>();

FarrAdapter = new ArrayAdapter<Button>(MainActivity.this,
    R.layout.listitem_btn, FarrlistBtns);

FlistView01 = (ListView)findViewById(R.id.listView01);
FlistView01.setAdapter(FarrAdapter);

Button btnNew = new Button(MainActivity.this);
btnNew.setText("New1"); // 1、这个设置好像没用
btnNew.setOnClickListener(new Button.OnClickListener() // 2、这个设置好像没用
    {
@Override
public void onClick(View _v)
{
Toast.makeText(
getApplication(),
"DDD",
Toast.LENGTH_SHORT).show();
}
    });

FarrAdapter.add(btnNew); // btn添加到 FlistView01

Button btnDynamic = (Button)findViewById(R.id.btnDynamic);
btnDynamic.setOnClickListener(new Button.OnClickListener()
    {
@Override
public void onClick(View _v)
{
Button btnNew = new Button(MainActivity.this);
btnNew.setText("New2");
FarrAdapter.add(btnNew);
}
    });

Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new Button.OnClickListener()
    {
@Override
public void onClick(View _v)
{
Button btnGet = (Button)FlistView01.getChildAt(0);
btnGet.setOnClickListener(new Button.OnClickListener()
    {
@Override
public void onClick(View _v)
{
Toast.makeText(
getApplication(),
((Button)_v).getText(),
Toast.LENGTH_SHORT).show();
}
    });
}
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}


运行的状态如下图:



我 button1 里面的代码可以设置 ListView里面的Button的点击事件,但是 FlistView01.getChildAt(0); 取得是 ListView显示出来的第一个Button,而非真正的ListView的第一个Button ...

如何能将 ListView 里面的 所有Button(包括显示出来的和没显示出来的)的点击事件统统设置一遍 ???

Android 菜鸟求教,请指点~~ !! 感谢 !!
任何代码、资料、链接皆可,再次感谢 !!



--------------------编程问答-------------------- 主界面 ,就3个控件,上面两个 Button (btnDynamic 和 button1),下面一个 ListView (listView01):

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btnDynamic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="btnDynamic" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/btnDynamic"
        android:text="button1" />

    <ListView
        android:id="@+id/listView01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/btnDynamic" >

    </ListView>

</RelativeLayout>




R.layout.listitem_btn   :

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    

</Button>

--------------------编程问答-------------------- 在ListView的自定义Adapter 的getView方法中设置ListView里面的Button事件

void getView(View convertView,x){
   convertView.setOnClickListener(new OnCLickListener(){

          //
   });
} --------------------编程问答--------------------
引用 2 楼 birdsaction 的回复:
在ListView的自定义Adapter 的getView方法中设置ListView里面的Button事件

void getView(View convertView,x){
   convertView.setOnClickListener(new OnCLickListener(){

          //
   });
}

我菜鸟,没看明白。
在网上也看到说“自定义Adapter 的 GetItem 然后用 ListView的getItenAtPosition” ,但是都不怎么明白...
有没有简单的 例子 或者 链接参考下啊??? --------------------编程问答--------------------


public class AccountsAdapter extends BaseAdapter
{

private List<LoginReq> list = new ArrayList<LoginReq>();

private Context context;



ViewHolder holder;


public AccountsAdapter(Context context,
List<LoginReq> list)
{
this.context = context;

this.list = list;

}

@Override
public int getCount()
{
return list.size();
}

@Override
public Object getItem(int position)
{
return list.get(position);
}

@Override
public long getItemId(int position)
{
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
holder = null;
if (convertView == null)
{
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.option_item, null);
holder.textView = (TextView) convertView
.findViewById(R.id.item_text);
holder.imageView = (ImageView) convertView
.findViewById(R.id.delImage);
holder.acountLayout = (RelativeLayout) convertView
.findViewById(R.id.account_rl);
convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
}

holder.textView.setText(list.get(position).getName());


holder.textView.setOnClickListener(new View.OnClickListener()
{

@Override
public void onClick(View v)
{

}
});


holder.imageView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{

}
});

return convertView;
}

private class ViewHolder
{
private TextView textView;

private ImageView imageView;



}
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,