需要帮助的点击监听器为Android定制的ListView [英] need help for on click listener for android custom ListView
本文介绍了需要帮助的点击监听器为Android定制的ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的应用程序定制的ListView,每一行都包含复选框,编辑文本和2个按钮。在主XML布局文件,我有1提交按钮和ListView。我想,当我点击提交按钮,我应该得到所有选中的行position.I是新到Android编程,所以plz帮助我,我的code未在这里工作是我的code:
main.xml中
<?XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout的xmlns:机器人=http://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:机器人=http://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屋!
查看全文