需要帮助的点击监听器为Android定制的ListView [英] need help for on click listener for android custom ListView

查看:145
本文介绍了需要帮助的点击监听器为Android定制的ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序定制的ListView,每一行都包含复选框,编辑文本和2个按钮。在主XML布局文件,我有1提交按钮和ListView。我想,当我点击提交按钮,我应该得到所有选中的行position.I是新到Android编程,所以plz帮助我,我的code未在这里工作是我的code:

main.xml中

 <?XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:方向=垂直
机器人:layout_width =match_parent
机器人:layout_height =match_parent><按钮的android:layout_height =WRAP_CONTENT
机器人:文字=@字符串/ button_submit
机器人:layout_width =WRAP_CONTENT
机器人:ID =@ + ID / main_submit_button机器人:的onClick =@字符串/ button_submit>< /按钮>< ListView控件
机器人:ID =@ + ID / list_view
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
/>< / LinearLayout中>

items.xml

 <?XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout
 的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
 机器人:方向=垂直
 机器人:layout_width =match_parent
 机器人:layout_height =WRAP_CONTENT>
<的LinearLayout机器人:layout_height =WRAP_CONTENT
  机器人:layout_width =FILL_PARENT>  <的TextView
  机器人:layout_height =WRAP_CONTENT
  机器人:layout_width =FILL_PARENT机器人:layout_weight =1
  机器人:ID =@ + ID / items_name
  机器人:重力=左
  机器人:文字样式=大胆/>  <复选框机器人:ID =@ + ID / items_check
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:重力=右
         />< / LinearLayout中>
 <的LinearLayout机器人:layout_height =WRAP_CONTENT
  机器人:layout_width =FILL_PARENT>  <按钮机器人:ID =@ + ID / items_add_button
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:重力=左
    机器人:文字=@字符串/ text_switcher_plus/>   < EditText上的android:数字=10
   机器人:文字样式=大胆的机器人:比重=左
   机器人:ID =@ + ID / items_plates机器人:layout_height =WRAP_CONTENT
   机器人:layout_width =90dp>< /&的EditText GT;
  <按钮的android:layout_height =WRAP_CONTENT
    机器人:layout_width =WRAP_CONTENT
    机器人:ID =@ + ID / items_minus_button
    机器人:文字=@字符串/ text_switcher_minus
    机器人:重力=右
    />
     < / LinearLayout中> < / LinearLayout中>

VegmenuActivity

 包com.sagar.resmenu;进口的java.util.ArrayList;
进口java.util.Arrays中;进口android.app.Activity;
进口android.os.Bundle;
进口android.util.Log;
进口android.util.SparseBooleanArray;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.Button;
进口android.widget.ListView;  //参考文献:http://pareshnmayani.word$p$pss.com/tag/android-custom-listview-example
  公共类VegmenuActivity扩展活动实现OnItemClickListener { 包含项目名称//动态数组
   私人的ArrayList<串GT;项目=新的ArrayList<串GT;
   (Arrays.asList(素食pulav,帕乌bhaji,咖喱Panir,蔬菜kolhapuri
           椰子饭,豆花饭,薄荷辛普劳
                         香蕉蛋奶,Basundi,奶酪土豆Tikkis
                          姆乌尔都语童谣| Aloo));   私人的ArrayList<整数GT;计数器=新的ArrayList<整数GT;
                        (Arrays.asList(0,0,0,0,0,0,0,0,0,0,0));   私人SparseBooleanArray一个;   @覆盖
   公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);    的setContentView(R.layout.main);
    最终的ListView LV =(ListView控件)findViewById(R.id.list_view);
  // lv.setOnClickListener(NULL);
    MyAdapter适配器=新MyAdapter(getApplicationContext(),物品柜);
    lv.setAdapter(适配器);
    lv.setItemsCanFocus(假);
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    按钮submit1;
    submit1 =(按钮)findViewById(R.id.main_submit_button);
    submit1.setOnClickListener(新OnClickListener()
    {
    @覆盖
    公共无效的onClick(视图v)
    {
        一个=新SparseBooleanArray();
        明确();
        一个= lv.getCheckedItemPositions();
        INT LEN = items.size();        的for(int i = 0; I< LEN,我++)
        {
            如果(a.valueAt(我)==真)
                Log.d(返回,将String.valueOf(a.valueAt(I)));         }
      }
    });   }  //私人OnItemClickListener selectCat =新OnItemClickListener();
   公共无效onItemClick(适配器视图<>一种,视图V,INT当前位置,长的id){
    // TODO自动生成方法存根
          }  }

MyAdapter.java

 包com.sagar.resmenu; 进口的java.util.ArrayList; 进口android.content.Context;
 进口android.view.LayoutInflater;
 进口android.view.View;
 进口android.view.ViewGroup;
 进口android.view.View.OnClickListener;
 进口android.widget.BaseAdapter;
 进口android.widget.Button;
 进口android.widget.CheckBox;
 进口android.widget.EditText;
 进口android.widget.TextSwitcher;
 进口android.widget.TextView;公共类MyAdapter扩展BaseAdapter实现OnClickListener {
  私人LayoutInflater吹气;
  私人的ArrayList<串GT;数据;
  VegmenuActivity米;
  私人的ArrayList<整数GT;计数器; 公共MyAdapter(上下文的背景下,ArrayList的<串GT;数据的ArrayList<整数GT;计数器){
    // TODO自动生成构造函数存根
   超();
  //将缓存LayoutInflater以便更快地使用
   this.inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  //设置数据事件
   this.data =数据;
  this.counter =计数器;
  }
 公众诠释的getCount(){
    返回this.data.size();
//返回this.counter.size();
  }  公共字符串的getItem(INT位置)抛出IndexOutOfBoundsException异常{
    返回null;
  }  众长getItemId(INT位置)抛出IndexOutOfBoundsException异常{
    返回0;
  }  公众诠释getViewTypeCount(){
    返回1;
  }  公共静态类ViewHolder
    {
        TextView的items_name;        复选框items_check;
        按钮items_plus_button;
        按钮items_minus_button;
        的EditText板;
    }
  公共查看getView(INT位置,查看convertView,父母的ViewGroup){
     //会将myText字符串=的getItem(位置);
     ViewHolder持有人;
     如果(convertView == NULL){//如果View不缓存
        //膨胀从XML文件中普遍的观点
         持有人=新ViewHolder();
        convertView = this.inflater.inflate(R.layout.items,父母,假);        holder.items_name =(TextView中)convertView.findViewById(R.id.items_name);
        holder.plates =(EditText上)convertView.findViewById(R.id.items_plates);
        holder.items_check =(复选框)convertView.findViewById(R.id.items_check);       convertView.setTag(保持器);                }                其他
                 支架=(ViewHolder)convertView.getTag();                 holder.items_name.setText(data.get(位置));
                 holder.plates.setText(将String.valueOf(counter.get(位置)));
                返回convertView;
     } @覆盖
 公共无效的onClick(查看为arg0){
    // TODO自动生成方法存根 } }


解决方案

当我需要检查里面的ListView盒,我常常code如下:

  MyAdapter.java: - 声明一个布尔数组,以纪念该项目被选中/取消:    ....
    布尔[]核对;
    ...里面的构造函数:    检查=新的布尔[data.size()]; - 内部getView()    {
   .....    holder.items_check.setChecked(选中[位置]);
    holder.items_check.setOnCheckedChangeListener(新OnCheckedChangeListener(){
      @覆盖
      公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked){
        勾选[位置] =器isChecked;
      }
    });
    .....
- 和方法来获取所有检查的项目:
布尔[] getCheckedItems(){
   返回检查;
}

这就是!

my app has custom ListView, each row contains checkbox ,edit text and 2 buttons. In the main xml layout file i have 1 submit button and listView. i want that, when i click on submit button, i should get all checked row position.I am new to android programming ,so plz help me my code is not working here is my code:

main.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<Button android:layout_height="wrap_content" 
android:text="@string/button_submit" 
android:layout_width="wrap_content" 
android:id="@+id/main_submit_button" android:onClick="@string/button_submit"></Button>

<ListView
android:id="@+id/list_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

</LinearLayout>

items.xml

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


<LinearLayout android:layout_height="wrap_content"
  android:layout_width="fill_parent">

  <TextView 
  android:layout_height="wrap_content"
  android:layout_width="fill_parent" android:layout_weight="1"
  android:id="@+id/items_name" 
  android:gravity="left"
  android:textStyle="bold" />

  <CheckBox android:id="@+id/items_check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="right"
         />

</LinearLayout>


 <LinearLayout android:layout_height="wrap_content"
  android:layout_width="fill_parent">

  <Button android:id="@+id/items_add_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:gravity="left"
    android:text="@string/text_switcher_plus" />

   <EditText android:digits="10" 
   android:textStyle="bold" android:gravity="left" 
   android:id="@+id/items_plates" android:layout_height="wrap_content" 
   android:layout_width="90dp"></EditText>


  <Button  android:layout_height="wrap_content"         
    android:layout_width="wrap_content"  
    android:id="@+id/items_minus_button"
    android:text="@string/text_switcher_minus"
    android:gravity="right"
    />


     </LinearLayout>

 </LinearLayout>

VegmenuActivity

package com.sagar.resmenu;

import java.util.ArrayList;
import java.util.Arrays;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;

  // reference:http://pareshnmayani.wordpress.com/tag/android-custom-listview-example
  public class VegmenuActivity extends Activity implements OnItemClickListener{

 //dynamic array that contains names of items
   private ArrayList<String> items = new ArrayList<String>
   (Arrays.asList("Veg pulav", "Pav bhaji", "Panir tikka", "veg kolhapuri",
           "Coconut Rice", "Curd rice", "Mint Pulao",
                         "Banana  Custard","Basundi", "Cheese potato Tikkis",
                          "Dum aloo"));

   private ArrayList<Integer> counter = new ArrayList<Integer>
                        (Arrays.asList(0, 0,0, 0, 0,0, 0,0, 0,0,0));

   private SparseBooleanArray a;

   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    final ListView lv =(ListView)findViewById(R.id.list_view);
  //  lv.setOnClickListener(null);
    MyAdapter adapter = new MyAdapter(getApplicationContext(),items,counter);
    lv.setAdapter(adapter);
    lv.setItemsCanFocus(false);    
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    Button submit1;
    submit1 = (Button)findViewById(R.id.main_submit_button);
    submit1.setOnClickListener(new OnClickListener()
    {
    @Override
    public void onClick(View v)
    {
        a = new SparseBooleanArray();
        a.clear();
        a = lv.getCheckedItemPositions();
        int len = items.size();

        for (int i = 0; i < len; i++)
        {


            if(a.valueAt(i) == true)
                Log.d("Returned ", String.valueOf(a.valueAt(i)));

         }                
      }
    }); 

   }    

  //private OnItemClickListener selectCat = new OnItemClickListener();
   public void onItemClick(AdapterView<?> a, View v, int positon, long id) {
    // TODO Auto-generated method stub
          } 

  }

MyAdapter.java

 package com.sagar.resmenu;

 import java.util.ArrayList;

 import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.View.OnClickListener;
 import android.widget.BaseAdapter;
 import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.EditText;
 import android.widget.TextSwitcher;
 import android.widget.TextView;

public class MyAdapter extends BaseAdapter implements OnClickListener{
  private LayoutInflater inflater;
  private ArrayList<String>  data;
  VegmenuActivity m;
  private ArrayList<Integer> counter;

 public MyAdapter(Context context, ArrayList<String> data,ArrayList<Integer> counter) {
    // TODO Auto-generated constructor stub
   super();
  // Caches the LayoutInflater for quicker use
   this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  // Sets the events data
   this.data= data;
  this.counter=counter;   
  }


 public int getCount() {
    return this.data.size();
//return this.counter.size();
  }

  public String getItem(int position) throws IndexOutOfBoundsException{
    return null;
  }

  public long getItemId(int position) throws IndexOutOfBoundsException{
    return 0;
  }

  public int getViewTypeCount(){
    return 1;
  }

  public static class ViewHolder   
    { 


        TextView items_name;

        CheckBox items_check ;
        Button items_plus_button;
        Button items_minus_button;
        EditText plates;
    }


  public View getView(int position, View convertView, ViewGroup parent){
     //String myText = getItem(position);          
     ViewHolder holder;
     if(convertView == null){ // If the View is not cached
        // Inflates the Common View from XML file
         holder = new ViewHolder();
        convertView = this.inflater.inflate(R.layout.items,parent,false);

        holder.items_name = (TextView) convertView.findViewById(R.id.items_name);
        holder.plates = (EditText) convertView.findViewById(R.id.items_plates);
        holder.items_check = (CheckBox) convertView.findViewById(R.id.items_check);      

       convertView.setTag(holder);

                }

                else           
                 holder=(ViewHolder)convertView.getTag();       

                 holder.items_name.setText(data.get(position));
                 holder.plates.setText(String.valueOf(counter.get(position)));
                return convertView;
     }    

 @Override
 public void onClick(View arg0) {
    // TODO Auto-generated method stub

 }  

 }

解决方案

when I need check boxes inside listview, I often code as following:

MyAdapter.java:

- Declare an boolean array to mark which item is checked/unchecked:

    ....
    boolean[] checked;
    ...

inside constructor: 

    checked = new boolean[data.size()];

- Inside getView() 

    {


   .....

    holder.items_check.setChecked(checked[position]);
    holder.items_check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        checked[position] = isChecked;              
      }
    });
    .....
- And method to get all checked items:
boolean[] getCheckedItems() {
   return checked;
}

That's !

这篇关于需要帮助的点击监听器为Android定制的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆