ListView的麻烦有关问题,搞2天了,求大量帮助!多谢各位
ListView的麻烦问题,搞2天了,求大量帮助!!!谢谢各位

红框部分是ListView " 数量(实)"列的都是EditText
现在想要实现点击每个item上的checkbox的时候
对应item的EditText就显示和"数量(预)"列里面相同的数值
现在能够实现点击"全选"的时候将所有的EditText都是显示数字
不能实现的就是点击对应item去显示所点击item的EditText上的数字
已经百度2天了,目前还未找到解决办法,求各位大神们支招!!!
万分感谢!!!
------解决思路----------------------
item跟checkbox是会冲突的 这个一般都是代码来控制checkbox的将checkbox的focusable设为false
------解决思路----------------------
这个真没有,你可以在网上搜重写ontouch事件,会有不少的。
------解决思路----------------------
单选你就每次点击后将list中的所有isSow值设为false,然后设置点击的postion那个tiem的isSow为true然后更新adapter就好了啊
------解决思路----------------------
帮你写好了,直接用吧。
实体类Goods.
Adapter类:
MainActivity类:
activity_main.xml
list_item.xml
------解决思路----------------------
这个应该是条目的事件与checkbox的事件冲突问题,你将checkbox设置成不能点击状态,并且将checkbox和条目绑定
红框部分是ListView " 数量(实)"列的都是EditText
现在想要实现点击每个item上的checkbox的时候
对应item的EditText就显示和"数量(预)"列里面相同的数值
现在能够实现点击"全选"的时候将所有的EditText都是显示数字
不能实现的就是点击对应item去显示所点击item的EditText上的数字
已经百度2天了,目前还未找到解决办法,求各位大神们支招!!!
万分感谢!!!
------解决思路----------------------
item跟checkbox是会冲突的 这个一般都是代码来控制checkbox的将checkbox的focusable设为false
------解决思路----------------------
这个真没有,你可以在网上搜重写ontouch事件,会有不少的。
------解决思路----------------------
笨方法就是list中添加一个属性isShow,默认是false,点击哪个呢,就设置哪个是ture,在adapter里面呢根据isSow这个属性呢,去判断EditText是否显示那个值,别忘了notifyDataSetChanged();一下
这个方法对多选有用,单选的还是不行,不知道是不是我写的不好!
单选你就每次点击后将list中的所有isSow值设为false,然后设置点击的postion那个tiem的isSow为true然后更新adapter就好了啊
------解决思路----------------------
帮你写好了,直接用吧。
实体类Goods.
package com.example.androiddemo;
public class Goods {
String name;
String nums_yu;
String nums_shi;
boolean isselect;
public Goods(String name,String nums_yu,String nums_shi,boolean isselect){
this.name = name;
this.nums_yu = nums_yu;
this.nums_shi = nums_shi;
this.isselect = isselect;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNums_yu() {
return nums_yu;
}
public void setNums_yu(String nums_yu) {
this.nums_yu = nums_yu;
}
public String getNums_shi() {
return nums_shi;
}
public void setNums_shi(String nums_shi) {
this.nums_shi = nums_shi;
}
public boolean isIsselect() {
return isselect;
}
public void setIsselect(boolean isselect) {
this.isselect = isselect;
}
}
Adapter类:
package com.example.androiddemo;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter {
private Context mContext;
private List<Goods> goods;
private MyAdapter instance;
private int tag = 0;//0表示点击全选,1表示点击某一个。
public MyAdapter(Context context, List<Goods> list) {
this.mContext = context;
this.goods = list;
instance = this;
}
public void setGoods(List<Goods> goods) {
this.goods = goods;
}
@Override
public int getCount() {
if(goods!=null&&goods.size()>0){
return goods.size();
}else{
return 0;
}
}
@Override
public Object getItem(int position) {
return goods.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView==null){
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, null);
holder.name = (TextView)convertView.findViewById(R.id.goods);
holder.num_yu = (TextView)convertView.findViewById(R.id.nums_yu);
holder.num_shi = (EditText)convertView.findViewById(R.id.nums_shi);
holder.isselect = (CheckBox)convertView.findViewById(R.id.check_box);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
holder.name.setText(goods.get(position).getName());
holder.num_yu.setText(goods.get(position).getNums_yu());
holder.num_shi.setText(goods.get(position).getNums_shi());
boolean allSelect = goods.get(0).isIsselect();
if(position==0){
holder.num_shi.setVisibility(View.VISIBLE);
}else{
if(tag==0){
if(allSelect){
holder.num_shi.setVisibility(View.VISIBLE);
holder.isselect.setChecked(true);
}else{
holder.num_shi.setVisibility(View.INVISIBLE);
holder.isselect.setChecked(false);
}
}else if(tag==1){
if(goods.get(position).isIsselect()){
holder.num_shi.setVisibility(View.VISIBLE);
holder.isselect.setChecked(true);
}else{
holder.num_shi.setVisibility(View.INVISIBLE);
holder.isselect.setChecked(false);
}
}
}
holder.isselect.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
/**
*此处如果数量过多,则会影响速度,所以自己优化一下,如果需要存储数据,则存储一下。
*/
if(position==0){
if(isChecked){
for(int i=0;i<goods.size();i++){
goods.set(i, new Goods(
goods.get(i).getName(),
goods.get(i).getNums_yu(),
goods.get(i).getNums_shi(),
true));
}
}else{
for(int i=0;i<goods.size();i++){
goods.set(i, new Goods(
goods.get(i).getName(),
goods.get(i).getNums_yu(),
goods.get(i).getNums_shi(),
false));
}
}
tag = 0;
}else{
if(isChecked){
goods.set(position, new Goods(
goods.get(position).getName(),
goods.get(position).getNums_yu(),
goods.get(position).getNums_shi(),
true));
}else{
goods.set(position, new Goods(
goods.get(position).getName(),
goods.get(position).getNums_yu(),
goods.get(position).getNums_shi(),
false));
}
tag = 1;
}
instance.notifyDataSetChanged();
}
});
return convertView;
}
private class ViewHolder{
TextView name;
TextView num_yu;
EditText num_shi;
CheckBox isselect;
}
}
MainActivity类:
package com.example.androiddemo;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.ListView;
public class MainActivity extends ActionBarActivity {
private List<Goods> goods = new ArrayList<Goods>();
private MyAdapter mAdapter;
private ListView mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
mList = (ListView)findViewById(R.id.list_view);
goods.add(new Goods("商品","数量(预)","数量(实)",false));
goods.add(new Goods("橙子","500","500",false));
goods.add(new Goods("柠檬","600","600",false));
goods.add(new Goods("苹果","800","800",false));
mAdapter = new MyAdapter(this,goods);
mList.setAdapter(mAdapter);
}
}
activity_main.xml
<FrameLayout 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"
>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>
</FrameLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="40.0dip"
android:orientation="horizontal" >
<TextView
android:id="@+id/goods"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="商品"
android:textSize="12.0sp"
android:gravity="center"
/>
<TextView
android:id="@+id/nums_yu"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="数量(预)"
android:textSize="12.0sp"
android:gravity="center"
/>
<EditText
android:id="@+id/nums_shi"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="数量(实)"
android:textSize="12.0sp"
android:gravity="center"
/>
<CheckBox
android:id="@+id/check_box"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="全选"
android:textSize="12.0sp"
android:gravity="center"
/>
</LinearLayout>
------解决思路----------------------
这个应该是条目的事件与checkbox的事件冲突问题,你将checkbox设置成不能点击状态,并且将checkbox和条目绑定