2012-12-26 26 views
1

我有一個listview併爲其設置BaseAdapter,行佈局只有textview。如何檢索先前在列表視圖中選擇哪個子視圖

我通過查看對象跟蹤以前的textview,現在當我滾動listview視圖時,previoustextview obj不起作用。

如何知道先前選擇了哪個子視圖。

public View getView(final int position, final View convertView, final ViewGroup parent) { 
     TextView txtview = (TextView) convertView;    
     boolean flag = false; 
     final Resources res = getResources(); 
     final Drawable actbtnDoneDraw = res.getDrawable(R.drawable.action_done_button); 
     final Drawable actbtnSelectedDraw = res.getDrawable(R.drawable.action_button_selected); 
     final Drawable actbtnDraw = res.getDrawable(R.drawable.action_button); 

     if (null == convertView) { 

       if (DeviceDetail.isGalaxyTabOriginal()) { 
        txtview = (TextView) inflater.inflate(R.layout.list_txtview_gtab0, parent, 
          true); 
       } else { 

        txtview = (TextView) inflater.inflate(R.layout.list_txtview, parent, false); 

       } 

      } else { 
       txtview = (TextView) convertView; 
       if (selectedposition != position) { 
        txtview.setBackgroundDrawable(actbtnDraw); 
        txtview.setSelected(false); 

       } else { 

        txtview.setBackgroundDrawable(actbtnSelectedDraw); 
        txtview.setSelected(true); 

       } 
      } 
      final Activity activity = activities.get(position); 
      txtview.setText(activity.name); 
      txtview.setTag(Integer.valueOf(activity.id)); 

      txtview.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(final View v) { 
        selectedposition = position; 
        Log.i("Onclick position = " + position); 
        modifyButtonView(v, position); 
       } 
      }); 

     } 

public void modifyButtonView(final View view, final int position) { 

     final TextView v = (TextView) view; 
     final TextView pv = (TextView) previousview; 

     final Resources res = getResources(); 
     final Drawable actbtnSelectedDraw = res.getDrawable(R.drawable.action_button_selected); 
     final Drawable actbtnDraw = res.getDrawable(R.drawable.action_button); 



     if (NoSelection) { 
      v.setSelected(true); 
      v.setBackgroundDrawable(actbtnSelectedDraw); 


     } else { 
      if (previousposition != position) { 

       v.setSelected(true); 
       pv.setBackgroundDrawable(actbtnDraw); 
       v.setBackgroundDrawable(actbtnSelectedDraw); 
       pv.setSelected(false); 
      } 
     }    

     previousview = v; 
     previousposition = position; 
     NoSelection = false; 
     mListener.onActivityButtonClicked(v); 
    } 
} 

回答

0

//獲取以前的觀點,根據位置,....方法(視圖位置)

  final int wantedPosition = previousposition; 
      final int firstPosition = listview.getFirstVisiblePosition() 
        - listview.getHeaderViewsCount(); 
      final int wantedChild = wantedPosition - firstPosition; 
      if (!(wantedChild > firstPosition && wantedPosition < listview 
        .getLastVisiblePosition())) { 

//櫃面如果你的TextView只爲比排視圖

   pv = (TextView) listview.getChildAt(wantedChild); 
       if (pv == null) { 
        pv = (TextView) previousview; 
       } 
      } 
      if (previousposition != position) { 
       // perform the operation on the pv view or current v view 
      } 
     } 
     previousview = v; 
     previousposition = position;    
0

如何知道哪些子視圖先前已被選中。

將兩個字段變量添加到您的Adapter類中,將它們稱爲public int previousChoicecurrentChoice。在您的onItemClick()onListItemClick()方法內使用第三個參數position更新此值。

mAdapter.previousChoice = mAdapter.currentChoice; 
mAdapter.currentChoice = position; 
+0

好的,我想修改該子視圖的drawablebackground ..我該怎麼辦..?我的最終目標是修改previouschild視圖... – Bhaumik

+0

您將需要修改'getView()'以有效更改背景,發佈您正在使用的代碼。 – Sam

+0

好吧..我發佈它作爲我的答案.. – Bhaumik