item的布局是自定义的,左边一个textview,右边一个checkbox
至于数量自己计数吧,检查被选中的checkbox是否大于3

解决方案 »

  1. 右边那个勾勾用什么都可以,imageView什么的都行,只要能显示那个勾勾就行。
    我觉得计数还是要放到你自定义的adapter里面比较好,大概的思路可以这样写在adapter中有一个全局变量count=0,这个变量有get和set方法,当你的item发生
    点击事件时,去adapter中get count这个变量,如果小于3,显示后面的勾勾,并且把
    count+1 set回adapter并且建议你的item还要设一个变量boolean flag,默认为false,这个变量判断这个item是否打了勾勾,
    点击这个item的时候,判断这个变量是否为false,如果为false,去做后面的事情,
    如果能打勾勾,再把这个变量set 为true。
    如果为true,就把后面的勾勾取消掉,flag set 回false。
    这样你就还可以防止点错勾勾,可以取消勾了。打得有点乱,不晓得我说明白没
      

  2. @pang376654973    谢谢您的回复“item还要设一个变量boolean flag”对于 item要设置一个变量 flag。有点不太明白,比如说默认的时候,flag 为 false。当点击  item 1 的时候,  显示  表示 “打开”  的 图片,然后 flag设置为 true。那么 当点击 item2 的时候, 显示 表示 “打开” 的 图片,这时后,要把flag 设置为 true。 那么这个标志为怎么写呢?
    怎么区分 是 item1  的标志位 而不是 item2 的标志位呢?

    就是 item1  怎么跟  对应的标志位 flag   对应起来
             item2  怎么跟  对应的标志位 flag   对应起来代码 不太清楚怎么写区分
    麻烦再说下吧,谢谢啦
      


  3. 请问 在 public View getView(int position,View convertView,ViewGroup parent ) { ViewHolder viewHolder = null;
    try {
    if ( convertView == null ) {
    convertView = layoutInflater.from(context).inflate(R.layout.item_information, null);//yong
    viewHolder = new ViewHolder();
    viewHolder.textview_info = (TextView) convertView.findViewById(R.id.textview_info);
    viewHolder.imageview_correct = (ImageView) convertView.findViewById(R.id.imageview_correct);

    viewHolder.layout_info = (RelativeLayout) convertView.findViewById(R.id.wodeguangzhu_layout);
    // layout_info  里边有  textview  和  imageview

    convertView.setTag(viewHolder);
    } else {
    viewHolder = (ViewHolder) convertView.getTag();
    }
               viewHolder.textview_info.setText(Informationlist.get(position).get("n").toString());
    } catch ( Exception e ) {
    e.printStackTrace();
    }

    return convertView;
    }      里边 怎么添加 layout_info的点击事件呢  和怎么写代表是 第i 个item的 相对布局呢   麻烦会的朋友回复 谢谢
      

  4. 看来你对listview还不是很熟悉啊。你传给adapter的不是一个list<object> 么?
    我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag
    不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。
    你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener);
    在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {
    //其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置,
    //通过这个参数,你可以找到对应的item的flag
    }
      

  5. 看来你对listview还不是很熟悉啊。你传给adapter的不是一个list<object> 么?
    我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag
    不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。
    你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener);
    在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {
    //其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置,
    //通过这个参数,你可以找到对应的item的flag
    }
    @pang376654973   非常感谢您的回复
    但是还有些地方不太明白呀,代码如下:
     public class InformationAdapter extends BaseAdapter {  
    。   public int getCount() {
    Log.d(TAG,"InformationAdapter: public int getCount()");
    return Informationlist.size();
    }

    public Object getItem( int position ) {
    Log.d(TAG,"InformationAdapter: public Object getItem( int position ) position ="+position);
    return position;
    }

    public long getItemId( int position ) {
    Log.d(TAG,"informationadapter:public long getItemId( int position )");
    return position;
    }      public View getView(int position,View convertView,ViewGroup parent ) {
    Log.d(TAG,"InformationAdapter: public View getView");
                     。。
                       。。
             }
    }另外上面的界面是在fragment上显示的 :
    public class InformationFragment extends BaseFragment {

      listView11.setOnItemClickListener( new OnItemClickListener() {
    public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is  position  
    Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);

    }
    }); 

    }
    当点击某一个item的时候,
    03-11 10:34:17.265: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
    03-11 10:34:17.270: D/InformationAdapter(31193): InformationAdapter: public int getCount()
    03-11 10:34:17.335: D/InformationAdapter(31193): InformationAdapter: public int getCount()
    03-11 10:34:17.335: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
    03-11 10:34:17.340: D/InformationFragment(31193):  listView11 onItemClick InformationFragment position = 4它只是调用了这些函数。 奇怪的是顺序为什么 getItemId()--》getCount()-》getItemId()-》 getItemId()--》最后就是  我的理解是 把 flag放在一个数组里边, 数组的第一个位置代表 item1,以此类推。它的值不同就代表不同的状态。但是 这个 应该放在哪个函数处理呢? getItemId()?getCount()?还是?但是当点击的时候,代码没有跑 public View getView(int position,View convertView,ViewGroup parent ) 这个函数的 。麻烦再回复下,谢啦
    会的朋友麻烦也帮忙回复下吧,谢谢
      

  6. 看来你对listview还不是很熟悉啊。你传给adapter的不是一个list<object> 么?
    我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag
    不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。
    你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener);
    在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {
    //其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置,
    //通过这个参数,你可以找到对应的item的flag
    }
    @pang376654973   非常感谢您的回复
    但是还有些地方不太明白呀,代码如下:
     public class InformationAdapter extends BaseAdapter {  
    。   public int getCount() {
    Log.d(TAG,"InformationAdapter: public int getCount()");
    return Informationlist.size();
    }

    public Object getItem( int position ) {
    Log.d(TAG,"InformationAdapter: public Object getItem( int position ) position ="+position);
    return position;
    }

    public long getItemId( int position ) {
    Log.d(TAG,"informationadapter:public long getItemId( int position )");
    return position;
    }      public View getView(int position,View convertView,ViewGroup parent ) {
    Log.d(TAG,"InformationAdapter: public View getView");
                     。。
                       。。
             }
    }另外上面的界面是在fragment上显示的 :
    public class InformationFragment extends BaseFragment {

      listView11.setOnItemClickListener( new OnItemClickListener() {
    public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is  position  
    Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);

    }
    }); 

    }
    当点击某一个item的时候,
    03-11 10:34:17.265: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
    03-11 10:34:17.270: D/InformationAdapter(31193): InformationAdapter: public int getCount()
    03-11 10:34:17.335: D/InformationAdapter(31193): InformationAdapter: public int getCount()
    03-11 10:34:17.335: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
    03-11 10:34:17.340: D/InformationFragment(31193):  listView11 onItemClick InformationFragment position = 4它只是调用了这些函数。 奇怪的是顺序为什么 getItemId()--》getCount()-》getItemId()-》 getItemId()--》最后就是  我的理解是 把 flag放在一个数组里边, 数组的第一个位置代表 item1,以此类推。它的值不同就代表不同的状态。但是 这个 应该放在哪个函数处理呢? getItemId()?getCount()?还是?但是当点击的时候,代码没有跑 public View getView(int position,View convertView,ViewGroup parent ) 这个函数的 。麻烦再回复下,谢啦
    会的朋友麻烦也帮忙回复下吧,谢谢
    首先,我建议你去好好看看listview的讲解,网上,书上都行。public Object getItem( int position ),adapter里面这个函数不应该return position。
    这个函数的意思是返回你点击那个item的数据,也就是你传入那个list的具体的一个。应该写成这样:
    public Object getItem( int position ) {
    return Informationlist.get(position).;
    }
    这样你要获得对应item的值,只需要在item的点击事件中写 adapter.getItem.getflag就行了。
    当然你需要在list<object>的object中写好flag的get,set方法。然后你的下一个问题,getView跑的时候不是点击item的时候,这个方法的作用是,
    展示view的,比如你当前页面初始能展示5个item,当你往下滑,这个时候第6个item
    就要出现了,这时adapter就会自动调用getView()去生成一个view赋给新出现的item。
    所以getView()不是你点击item的时候会调用的。
      

  7. 上面笔误,是要获得对应item的flag的值。。
      

  8. @ pang376654973  谢谢您的回复我实在是不太明白您说的意思,不知道怎么写这个代码。 如果方便的话, 能帮忙简单的 写下吗?   谢啦
      


  9. 如果你连我说得这些都听不懂的话,我建议你就先不要写这么复杂的listView了。
    毕竟listview是个很基础的东西,建议你搞明白。先写一个简单的listview,成功后。
    再学习写自定义的adapter,怎么传值,里面的每个方法是什么意思。
    这些搞懂了,你最开始的问题就是小儿科了。
    一步一步来,不要急了。
      


  10. 如果你连我说得这些都听不懂的话,我建议你就先不要写这么复杂的listView了。
    毕竟listview是个很基础的东西,建议你搞明白。先写一个简单的listview,成功后。
    再学习写自定义的adapter,怎么传值,里面的每个方法是什么意思。
    这些搞懂了,你最开始的问题就是小儿科了。
    一步一步来,不要急了。@pang376654973   非常感谢您的回答
    这个 getItem()  getcount()    getview()这个具体什么作用弄明白了。
    但是您所说的 adapter.getItem.getflag  当然你需要在list<object>的object中写好flag的get,set方法。

    请问   list<object>的object中写好flag的get,set  方法, 也就是说 要在  Inte里边写这个方法了。
    但是这个具体怎么写,我还是不太清楚,毕竟这个Inte 是跟从网络数据库获取的数据有关联的。还有  比如 如果通过adapter.getItem.getflag,获得标志位后, 根据标志为,代码是怎么写 可以 设置imageview :imageview_correct   的可见性呢?
    前期就是要有 怎么表示 找到 该imageview,即类似 findviewbyid();
     也就是 比如 要把这个 imageview_correct.setVisible(View.INVISIBLE); 麻烦再回复下,谢谢
    在自定义的adapter代码如下:
    public class InformationAdapter extends BaseAdapter {
        
          public void addlist( List<Inte> addlist) {
    try {
    for ( Inte Intes : addlist ) {
    HashMap<String,Object> item = new HashMap<String,Object>();
    item.put("v", Interests.get_v()); //获取从网络数据库得到的 版本v
    Informationlist.add(item);
    }
    } catch ( Exception e ) {
    e.printStackTrace();
    }
    }}
    但是上面这个界面是在fragment显示的
    在 public class InformationFragment extends BaseFragment {
          
           listView11.setOnItemClickListener( new OnItemClickListener() {
    public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is  position  
    Log.d(TAG,"yong: listView11 onItemClick InformationFragment position = "+arg2);

    }
    });
         
            private final Handler mHandler = new Handler() {
    public void handleMessage{           mInfo = new InformationAdapter(getActivity(),list1);    //list1 为从网络数据库获取的数据
    mInfo .addlist(list1);
        listView11.setAdapter(mInfo );
              。
              
           }
    }
      

  11. @pang376654973   由于项目紧,请多多包涵
      


  12. 不知道你从网上下的数据的格式,我就简单跟你说一说。假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样),
    这样你需要把网上的数据解析成一个个图片,一个文字。
    解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:public class Infor { public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string
    public String word;
    public boolean flag;

    public Infor(){

    } public String getPicture() {
    return picture;
    } public void setPicture(String picture) {
    this.picture = picture;
    } public String getWord() {
    return word;
    } public void setWord(String word) {
    this.word = word;
    } public boolean isFlag() {
    return flag;
    } public void setFlag(boolean flag) {
    this.flag = flag;
    }


    }这样你的实体类里面包含所有你需要的数据加上flag;
    然后new你的实体类,并且用你的网上数据来给这个新new的对象赋值。Infor infor = new Infor();
    infor.setPicture(你从网上得到的数据);
    infor.setWord(你从网上得到的数据);
    infor.setFlag(false);
    然后再将这个对象交给你的list
    Informationlist.add(infor);还有数据你就不停new Infor的对象,不停赋值,不停交给你的list,最后将这个list交给adapter就行了。
    一般来说,我们会根据网上的数据的格式来写个for循环,来控制new多少个infor对象,自动赋值。
    因为不知道你从网上下的是什么数据,所以就不乱说了,你自己根据网上数据的来设定条件吧。
      

  13. 这个一般你给你适配器的数据源中加一个标识符,表明当前条目是否被选中,然后每次被点击的时候,就更新下数据,同时判断一下是否大于三个。基本就这个思路…右边箭头用什么都行,看你这原型图估计用个ImageView会比较好一点,默认隐藏,点击之后,如果被选的小于三个就显示当前Item的那个ImageView.
      


  14. 不知道你从网上下的数据的格式,我就简单跟你说一说。假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样),
    这样你需要把网上的数据解析成一个个图片,一个文字。
    解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:public class Infor { public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string
    public String word;
    public boolean flag;

    public Infor(){

    } public String getPicture() {
    return picture;
    } public void setPicture(String picture) {
    this.picture = picture;
    } public String getWord() {
    return word;
    } public void setWord(String word) {
    this.word = word;
    } public boolean isFlag() {
    return flag;
    } public void setFlag(boolean flag) {
    this.flag = flag;
    }


    }这样你的实体类里面包含所有你需要的数据加上flag;
    然后new你的实体类,并且用你的网上数据来给这个新new的对象赋值。Infor infor = new Infor();
    infor.setPicture(你从网上得到的数据);
    infor.setWord(你从网上得到的数据);
    infor.setFlag(false);
    然后再将这个对象交给你的list
    Informationlist.add(infor);还有数据你就不停new Infor的对象,不停赋值,不停交给你的list,最后将这个list交给adapter就行了。
    一般来说,我们会根据网上的数据的格式来写个for循环,来控制new多少个infor对象,自动赋值。
    因为不知道你从网上下的是什么数据,所以就不乱说了,你自己根据网上数据的来设定条件吧。
    谢谢楼上各位朋友的回复@ pang376654973    非常感谢您热心的回复,  这个问题还有点问题,就解决了。
    麻烦再帮忙回复下吧,谢啦请问, 当点击某个item项的时候,经过判断需要显示   “勾勾”  ,图案的时候,代码中怎么写代表找到了这个 控件,然后把它设置为 可见。
    即是:
    public class InformationFragment extends BaseFragment {

      listView11.setOnItemClickListener( new OnItemClickListener() {    //点击事件
             public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is  position  
                      Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
                  if (madapter.getItem.getflag){    //  假设madapter.getItem.getflag 为false,括号里边需要显示  “勾勾”
                                      xxxxx ; 怎么表示是找到该 item的  gougou_id  这个控件呢 也就是这种 findViewById(R.id.gougou_id );  
                                                     然后就可以把它设置为可见。 setVisibility(View.INVISIBLE);
      麻烦也说下这样写可见是否对了           }
     }); 

    }
    当点从网络数据库中取到的数据如下格式:data:  [
         {"v":1,  "n": 信息}
           {"v":2,  "n":内容}
          {"v":3,  "n":课本}
           {"v":4,  "n":数学}
    ]也就是要把它显示在 listview中:信息
    内容
    课本
    数学只不过 当用户点击,“信息”  的时候, 就要在信息 最右边 出现  “勾勾”  即:信息                  勾勾
    内容
    课本
    数学也就是说在 自定的adapter的布局文件 item _selected.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#FAFAFA"
        android:orientation="vertical" >   <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:background="#36B8FF" >            <TextView    
           android:layout_height="wrap_content"   
           android:layout_width="wrap_content"  
           android:textSize = "20sp"
           android:textColor ="#707070" 
           android:layout_alignParentLeft="true"
           android:layout_centerHorizontal="true"
                   android:layout_centerVertical="true"
                   android:layout_marginLeft="10dp"
           android:id="@+id/v"> 
           </TextView>        <ImageView    
           android:layout_height="wrap_content"   
           android:layout_width="wrap_content"  
           android:textSize = "20sp"
           android:textColor ="#707070" 
           android:layout_alignParentRight="true"
                            android:visibility="invisible"
                    android:src="@drawable/gougou"     //这个打勾的    图案是人为添加的,就是为了告诉
                                                                                                                              用户他点击过,接着再做相应的处理。
           android:id="@+id/gougou_id"> 
           </TextView>
        </RelativeLayout>
    </LinearLayout>
      


  15. 不知道你从网上下的数据的格式,我就简单跟你说一说。假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样),
    这样你需要把网上的数据解析成一个个图片,一个文字。
    解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:public class Infor { public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string
    public String word;
    public boolean flag;

    public Infor(){

    } public String getPicture() {
    return picture;
    } public void setPicture(String picture) {
    this.picture = picture;
    } public String getWord() {
    return word;
    } public void setWord(String word) {
    this.word = word;
    } public boolean isFlag() {
    return flag;
    } public void setFlag(boolean flag) {
    this.flag = flag;
    }


    }这样你的实体类里面包含所有你需要的数据加上flag;
    然后new你的实体类,并且用你的网上数据来给这个新new的对象赋值。Infor infor = new Infor();
    infor.setPicture(你从网上得到的数据);
    infor.setWord(你从网上得到的数据);
    infor.setFlag(false);
    然后再将这个对象交给你的list
    Informationlist.add(infor);还有数据你就不停new Infor的对象,不停赋值,不停交给你的list,最后将这个list交给adapter就行了。
    一般来说,我们会根据网上的数据的格式来写个for循环,来控制new多少个infor对象,自动赋值。
    因为不知道你从网上下的是什么数据,所以就不乱说了,你自己根据网上数据的来设定条件吧。
    谢谢楼上各位朋友的回复@ pang376654973    非常感谢您热心的回复,  这个问题还有点问题,就解决了。
    麻烦再帮忙回复下吧,谢啦请问, 当点击某个item项的时候,经过判断需要显示   “勾勾”  ,图案的时候,代码中怎么写代表找到了这个 控件,然后把它设置为 可见。
    即是:
    public class InformationFragment extends BaseFragment {

      listView11.setOnItemClickListener( new OnItemClickListener() {    //点击事件
             public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is  position  
                      Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
                  if (madapter.getItem.getflag){    //  假设madapter.getItem.getflag 为false,括号里边需要显示  “勾勾”
                                      xxxxx ; 怎么表示是找到该 item的  gougou_id  这个控件呢 也就是这种 findViewById(R.id.gougou_id );  
                                                     然后就可以把它设置为可见。 setVisibility(View.INVISIBLE);
      麻烦也说下这样写可见是否对了           }
     }); 

    }
    当点从网络数据库中取到的数据如下格式:data:  [
         {"v":1,  "n": 信息}
           {"v":2,  "n":内容}
          {"v":3,  "n":课本}
           {"v":4,  "n":数学}
    ]也就是要把它显示在 listview中:信息
    内容
    课本
    数学只不过 当用户点击,“信息”  的时候, 就要在信息 最右边 出现  “勾勾”  即:信息                  勾勾
    内容
    课本
    数学也就是说在 自定的adapter的布局文件 item _selected.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#FAFAFA"
        android:orientation="vertical" >   <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:background="#36B8FF" >            <TextView    
           android:layout_height="wrap_content"   
           android:layout_width="wrap_content"  
           android:textSize = "20sp"
           android:textColor ="#707070" 
           android:layout_alignParentLeft="true"
           android:layout_centerHorizontal="true"
                   android:layout_centerVertical="true"
                   android:layout_marginLeft="10dp"
           android:id="@+id/v"> 
           </TextView>        <ImageView    
           android:layout_height="wrap_content"   
           android:layout_width="wrap_content"  
           android:textSize = "20sp"
           android:textColor ="#707070" 
           android:layout_alignParentRight="true"
                            android:visibility="invisible"
                    android:src="@drawable/gougou"     //这个打勾的    图案是人为添加的,就是为了告诉
                                                                                                                              用户他点击过,接着再做相应的处理。
           android:id="@+id/gougou_id"> 
           </TextView>
        </RelativeLayout>
    </LinearLayout>
    知道怎么表示 找到该控件了 ,这个不用回复了
      

  16. 看来你对listview还不是很熟悉啊。你传给adapter的不是一个list<object> 么?
    我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag
    不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。
    你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener);
    在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {
    //其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置,
    //通过这个参数,你可以找到对应的item的flag
    }
    @pang376654973   非常感谢您的回复
    但是还有些地方不太明白呀,代码如下:
     public class InformationAdapter extends BaseAdapter {  
    。   public int getCount() {
    Log.d(TAG,"InformationAdapter: public int getCount()");
    return Informationlist.size();
    }

    public Object getItem( int position ) {
    Log.d(TAG,"InformationAdapter: public Object getItem( int position ) position ="+position);
    return position;
    }

    public long getItemId( int position ) {
    Log.d(TAG,"informationadapter:public long getItemId( int position )");
    return position;
    }      public View getView(int position,View convertView,ViewGroup parent ) {
    Log.d(TAG,"InformationAdapter: public View getView");
                     。。
                       。。
             }
    }另外上面的界面是在fragment上显示的 :
    public class InformationFragment extends BaseFragment {

      listView11.setOnItemClickListener( new OnItemClickListener() {
    public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is  position  
    Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);

    }
    }); 

    }
    当点击某一个item的时候,
    03-11 10:34:17.265: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
    03-11 10:34:17.270: D/InformationAdapter(31193): InformationAdapter: public int getCount()
    03-11 10:34:17.335: D/InformationAdapter(31193): InformationAdapter: public int getCount()
    03-11 10:34:17.335: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
    03-11 10:34:17.340: D/InformationFragment(31193):  listView11 onItemClick InformationFragment position = 4它只是调用了这些函数。 奇怪的是顺序为什么 getItemId()--》getCount()-》getItemId()-》 getItemId()--》最后就是  我的理解是 把 flag放在一个数组里边, 数组的第一个位置代表 item1,以此类推。它的值不同就代表不同的状态。但是 这个 应该放在哪个函数处理呢? getItemId()?getCount()?还是?但是当点击的时候,代码没有跑 public View getView(int position,View convertView,ViewGroup parent ) 这个函数的 。麻烦再回复下,谢啦
    会的朋友麻烦也帮忙回复下吧,谢谢
    首先,我建议你去好好看看listview的讲解,网上,书上都行。public Object getItem( int position ),adapter里面这个函数不应该return position。
    这个函数的意思是返回你点击那个item的数据,也就是你传入那个list的具体的一个。应该写成这样:
    public Object getItem( int position ) {
    return Informationlist.get(position).;
    }
    这样你要获得对应item的值,只需要在item的点击事件中写 adapter.getItem.getflag就行了。
    当然你需要在list<object>的object中写好flag的get,set方法。然后你的下一个问题,getView跑的时候不是点击item的时候,这个方法的作用是,
    展示view的,比如你当前页面初始能展示5个item,当你往下滑,这个时候第6个item
    就要出现了,这时adapter就会自动调用getView()去生成一个view赋给新出现的item。
    所以getView()不是你点击item的时候会调用的。
     @ pang376654973
    麻烦再帮忙回复下,谢啦。我已经按照您所说给数据 添加  flag,但是在 fragment 显示的界面的 listview click事件:
    这句话,会提示错误:
    mInformationAdapter.getItem(arg2).getFlag() 
    提示错误是:
    the method getFlag() is  undefined of the type Object.
    listView11.setOnItemClickListener( new OnItemClickListener() {
    public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is  position  
    Log.d(TAG,"yong: listView11 onItemClick InformationFragment position = "+arg2);
    Log.d(TAG,"yong: ++mInformationAdapter.getItem(arg2)= "+mInformationAdapter.getItem(arg2));
                   if(  mInformationAdapter.getItem(arg2).getFlag() ) {
          Log.d(TAG,"abc ");
    }
    }
    }); 
     而 为从网络取得的数据,添加了Flag,这个添加是在 自定义adapter里边处理
    public class InformationAdapter extends BaseAdapter {
    。。
         public void alist( List<Inte> alist) {     // 这个在fragment显示的文件里边 调用设置list ,mInformationAdapter.addlist(list1);
    try {
    for ( Inte Intes : alist ) {
    InformationData Infor = new InformationData();
                                    Infor.setFlag(false);
    Infor.setWord(Intes.get_n());
    Informationlist.add(Infor);
    }
    } catch ( Exception e ) {
    e.printStackTrace();
    }
    }

    }
      

  17. @cheyan_517967268 
    谢谢回复
    我实在是在网上没有找到我想要的哦,方便的话麻烦给个链接吧。
    另外这个问题,现在就是剩下:
    这句话,会提示错误: 如果会的朋友,麻烦指出是哪里错误吧,谢啦
    mInformationAdapter.getItem(arg2).getFlag() 
    提示错误是:
    the method getFlag() is  undefined of the type Object.listView11.setOnItemClickListener( new OnItemClickListener() {
     public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is  position  
     Log.d(TAG,"yong: listView11 onItemClick InformationFragment position = "+arg2);
     Log.d(TAG,"yong: ++mInformationAdapter.getItem(arg2)= "+mInformationAdapter.getItem(arg2));
                    if(  mInformationAdapter.getItem(arg2).getFlag() ) {
           Log.d(TAG,"abc ");
     } 
     }
     }); 
      

  18. 应该是你没在实体类写flag的get方法。。
    反正我目前没事,你可以加我qq,把代码发给我看看,我qq就是我名字后面的那串数字
      

类似问题 »