2017-09-01 59 views
0

我正在使用Retrofit從RecyclerView的服務器中加載數據。我已成功實施了GetPost改進方法,但我在PutDelete中遇到了一些問題。由於ReclyclerView需要一個Adapter來加載數據,我需要得到我點擊的行的位置,我必須在我的Adapter內實現onKeyPressed(因爲我使用和EditText)。從適配器中的活動調用方法

問題是,調用我的Interceptor,改造呼叫和Everything的方法在我的Activity中。 所以我決定從我的適配器中的這個活動調用方法來執行單個項目的放置和刪除。但我得到一個

java.lang.ClassCastException說方法不能被鑄造 到適配器。

這是onKeyPressed方法,ViewCategoryActivity對我的活動和SendNetworkRequest是我的方法:

holder.nameCategory.setOnKeyListener(new View.OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       // If the event is a key-down event on the "enter" button 
       if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
         (keyCode == KeyEvent.KEYCODE_ENTER)) { 

        System.out.println("Entrou no adapter!!"); 
        Category2 category = new Category2(); 
        category.setName(holder.nameCategory.getText().toString()); 
        ((ViewCategoriesActivity)mContext).SendNetworkRequest(categoryList.get(position).getProjectId(), 2, categoryList.get(position).get_id(), new SendCategory(holder.nameCategory.getText().toString())); 

        //Variable to check if the category inserted is equal to a previous one 
        int bool = 0; 
        //The for goes through the list and tries to find a category with the name equal to the one inserted 
        for (int i = 0; i < categoryList.size(); i++){ 

         //if it finds equal names bool = 1 
         if (categoryList.get(i).getName().equals(holder.nameCategory.getText().toString())){ 
          bool = 1; 
          Toast.makeText(mContext, mContext.getResources().getString(R.string.category_different_name), 
            Toast.LENGTH_LONG).show(); 
         } 
        } 

        //There's no category with the same name so it' OK so insert a new one 
        if (bool == 0){ 

         if(mContext instanceof ViewCategoriesActivity){ 
          ((ViewCategoriesActivity)mContext).SendNetworkRequest(categoryList.get(position).getProjectId(), 2, categoryList.get(position).get_id(), new SendCategory(holder.nameCategory.getText().toString())); 
         } 
         //categoryList.add(category); 

        } else { 

        } 


        // hide virtual keyboard 
        InputMethodManager imm = 
          (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(holder.nameCategory.getWindowToken(), 0); 
        return true; 
       } 
       return false; 
      } 
     }); 
+0

不這樣做。使用回調代替 –

+0

哪種方法無法投射? – Vyacheslav

+0

發佈您的調用堆棧 – Vyacheslav

回答

1

你應該傳遞一個聽衆從你的活動適配器。您應該使用該偵聽器在您的活動中調用該函數。也就是說,如果要調用你的適配器像下面,

adapter = new DataAdapter(data); 

的資料可能是一個ArrayList(假設),那麼通過這樣

adapter = new DataAdapter(data,ViewCategoriesActivity.this); 

上下文接受使用在構造函數這個監聽你的然後調用您的活動函數,如listener.yourFunction()

+0

我不明白你的答案,你能解釋一下嗎? –

+0

在您的活動: adapter = new DataAdapter(data,ViewCategoriesActivity.this); 在適配器類: 公衆的DataAdapter(字符串數據,活動活動){ } – CharlieNorris

+0

,然後只要需要調用activity.SendNetworkRequest() –

0

您可以輕鬆地使用偵聽器,儘量不要讓代碼變得複雜。根據我知道你的問題有很好的答案here,希望它能奏效。

相關問題