AndroidプログラミングリストListViewマークの行の状態を記録する方法

2551 ワード

本明細書の例は、Androidプログラミング記録ListViewマーカーライン状態の方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
Demoさんは特に何もありません。一番特別なのはnotifyData Set Charngedを使わないようにすることです。お金がかかりすぎて、もちろん使うのは多くの仕事が省けます。でも時々他の問題が発生します。プロジェクトの経験からこの可能性があると言われました。

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long arg3) {
  /**
   *  ListView ,  getChildAt(index)   ,         (     )   !
  1、                Null   ;
  2、getChildCount getCount         (    );
  3、     getChildAt(index).findViewById(...)     ,           。
      getFirstVisiblePosition()          ,     position-getFirstVisiblePosition(),  getChildAt  !
   * */
  int now_pos = pos - adapterView.getFirstVisiblePosition();
  View v = adapterView.getChildAt(now_pos);
  ImageView imageView = (ImageView) v.findViewById(R.id.image);
  if (imageView.getVisibility() == View.VISIBLE) {
   imageView.setVisibility(View.GONE);
   adapter.setState(pos,NONBIAOZHI);
  }else{
   imageView.setVisibility(View.VISIBLE);
   adapter.setState(pos,BIAOZHI);
   // getView{ , ^   M  
//   adapter.notifyDataSetChanged();
   //    notifyDataSetChanged,getView   ,    
   refreshListView(pos, imageView);
  }
}
public void refreshListView(int pos, ImageView imageView) {
  if(pre != pos && !hasmap.isEmpty()){
   ImageView image = (ImageView) hasmap.get(pre);
   image.setVisibility(View.GONE);
   hasmap.remove(pre);
  }
  pre = pos;
  hasmap.put(pre, imageView);
}

上記はActivityの方法セグメントで、以下はBaseAdapterの方法セグメントです。

// O  
public void setState(int pos,int state){
  if(state == MainActivity.BIAOZHI){
   //   c     ,    x 
   map.clear();
   map.put(pos, 1);
  }else{
   map.remove(pos);
  }
}
// zy 
public boolean getState(int p){
  if (!map.isEmpty() && map.containsKey(p)) {
   return true;
  }else
   return false;
}

get Viewコード:

//         
if (getState(position)) {
 holder.imageView.setVisibility(View.VISIBLE);
}else
 holder.imageView.setVisibility(View.GONE);

プロジェクトのダウンロードを添付して、自分で実行するとタイトルの効果が得られます。完全な実例コードはここをクリックしてダウンロードです。
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。