2011-07-07 45 views
1

我的活動有一個ListView具有自定義ArrayAdapter。 在我的ArrayAdapter上,我有一個圖像,一堆文本框和一個按鈕。在我的活動中傳播按鈕onclick自定義arrayadapter

在適配器的getView上我得到我的按鈕並設置setOnClickListener。從點擊監聽器,我可以得到點擊項目的索引。

現在我的問題是,我想傳播信息到我的主要活動,我想處理我的按鈕點擊。 我可以將索引信息保存在靜態變量中,但我仍然不知道如何在我的活動中觸發事件。

我該怎麼做?

我是新6天這樣的Android,由於 伊基

代碼:

我的活動:

public class MyClass extends Activity{ 
... 
    public void onCreate(Bundle savedInstanceState) { 
    ... 
    myListView = (ListView)findViewById(R.id.lvxml); 
    myList = new MyCustomArrayAdapter(this, myAnotherClassObject); 
    myListView .setAdapter(myList); 
    ... 
    } 
} 

現在在我的適配器

public class MyCustomArrayAdapter extends ArrayAdapter<myAnotherClass> { 
... 
.... 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     Button b = (Button)convertView.findViewById(R.id.myButtonInListView); 
     b.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       doStuff; 
      } 
    }); 
    } 
} 

我需要以某種方式從我的主要活動中觸發一個按鈕,但不會失去可能性o閱讀在列表視圖中單擊的索引。

回答

0

所以我解決了它莫名其妙。這可能不是這樣做的方式,但它的工作原理。

我將我的活動保存在靜態變量中。

Button b = (Button)convertView.findViewById(R.id.myButtonInListView); 
b.setTag(position); 
b.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      int i = (Integer) v.getTag(); 
      myStaticVarRep.myActivity.myMethod(i); 
     } 
}); 
+2

這是什麼在我的代碼中的myStaticVarRep。 myStaticVarRep.myActivity.myMethod(ⅰ); –

-1

我打算假設你的代碼看起來有點像這樣。

public class <Your Class> ... implements OnClickListener{ 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     . 
     . 
     . 
     button.setOnClickListener(this); 
    } 
} 

要處理按鈕點擊事件,您需要有一個看起來像這樣的onClick方法。

public void onClick(View v){ 
    <Handle your button click in here> 
} 

只要你點擊你的按鈕,它就會調用onClick方法。那就是你會操縱你的靜態變量,激發其他方法等等,我希望這會有所幫助。

+0

對不起,我想我並不清楚。我編輯了我的帖子,以更好地解釋我的問題,並帶有一些代碼。 – ggpuz

0

該指數是position變量。 IST必須是最終使用在這裏

公共查看getView(最終詮釋的立場,觀點convertView,ViewGroup以及母公司)

你可以通知你的Activity向監聽器接口。

0

這是一個替代方案,我認爲是更優雅的解決方案。

首先,在你的MyCustomArrayAdapter類,定義一個接口:

public interface MyCustomRowButtonListener{ 
    void onCustomRowButtonClick(MyAnotherClass selectedItem, int position, View view); 
} 

ArrayAdapter

public class MyCustomArrayAdapter{ 

    private MyCustomRowButtonListener mRowButtonListener; 
    //.... 
} 

創建的MyCustomRowButtonListener一個成員變量,並在構造函數中添加參數爲聽衆

public MyCustomArrayAdapter(Context context, MyCustomRowButtonListener listener){ 

    mContext = context; 
    mRowButtonListener = listener; 

} 

在getView方法:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    Button b = (Button)convertView.findViewById(R.id.myButtonInListView); 
    b.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      mRowButtonListener.onCustomRowButtonClick(getItem(position),position,b); 
     } 
}); 
} 

,並在您的活動:

myList = new MyCustomArrayAdapter(this, myAnotherClassObject,this); 

現在,讓你的活動實施MyCustomRowButtonListener

public class MyClass extends Activity implements MyCustomRowButtonListener{ 
... 
    public void onCreate(Bundle savedInstanceState) { 
    ... 
    myListView = (ListView)findViewById(R.id.lvxml); 
    myList = new MyCustomArrayAdapter(this, myAnotherClassObject,this); 
    myListView .setAdapter(myList); 
    ... 
    } 
} 

public void onCustomRowButtonClick(MyAnotherClass selectedItem, int position, View view){ 
    Toast.makeText(this,"You have selected "+selectedItem,Toast.LENGTH_SHORT).show(); 
}