2015-08-20 27 views
1

我已經創建了一個interface有兩種方法:如何訪問setOnItemClickListener方法中的接口?

public interface OnCarListener { 

    void onCarCompleted(String c); 

    void onCarError(String error); 
} 

而且我用這個interfaceAsyncTask內,但問題是當我嘗試執行此AsyncTask方法setOnItemClickListener內,因爲當我嘗試:

new findCar(this).execute(); 

它給我一個錯誤,說我正在做參考:

android.widget.AdapterView.OnItemClickListener

代替:

com.example.user.project.OnCarListener

我已經實現的接口到MainActivity類,如果我嘗試使用我的AsyncTaskonCreate()方法,它並沒有給我任何錯誤,但我並不需要在onCreate()方法來執行它,我需要在我的自定義適配器的方法setOnItemClickListener內執行它(它與ListView相關聯)

我希望我的問題能夠正確理解,如果沒有,請不要懷疑。

在此先感謝!

回答

3

你爲什麼不實現在你需要它的接口。請勿在MainActivity中執行OnCarListener並執行此操作。這樣,您就可以使用任何你想要

new findCar(new OnCarListener() 
    { 
     @Override 
     public void onCarCompleted(String c) 
     { 
      // Do your work 
     } 

     @Override 
     public void onCarError(String error) 
     { 
      // Do your work 
     } 
    }).execute(); 
+0

但是,如果我嘗試這一點。我應該刪除我的OnCarListener界面嗎? –

+0

否。保留,否則您將無法使用此代碼。 – Rohit5k2

+0

我很抱歉,直到我回答了很長時間,但我正在檢查我的程序中的另一個問題。你的代碼有效,但我擔心我有一個'synchronized(c){nameCar = c; } onCarCompleted'裏面,它似乎只有當我執行兩次或多次setOnItemClickListener方法時才起作用。第一個它不起作用。爲什麼會這樣? –

0

嘗試new findCar(MainActivity.this).execute();

+1

我認爲他需要'OnCarListener.this'參考,你看? – eduyayo

0

你可以試試這個方法

Create new interface in CustomAdapter, which notify 'clickEvent' in 
MainActivity from where you can execute Async. 

例如:

public class YourCustomAdapter extends AnyAdapter 
{ 
    ClickEventListener listener;  // new interface 
    YourCustomAdapter(Context context) 
    { 
     listener=(ClickEventListener)context; 
    } 

    // Rest overrided methods 
    getView() 
    { 
    // considering this is your click event 
    button.setOnClickListener(new View.OnClickListner) 
    { 
     listener.buttonClicked(); 
    } 
    } 

    // Create Interface OverHere 
    public interface ClickEventListener 
    { 
     public void buttonClicked(); 
    } 

} 

// Implement this interface in MainActivity 

public MainActivity extends Activity implements ClickEventListener 
{ 
    @override 
    buttonClicked() 
    { 
    new findCar(this).execute(); 
    } 
} 
+0

我希望這可以幫助你不知何故,如果我誤解了你的問題,對不起。 –