2016-05-16 3 views
2

Ich habe eine Schaltfläche in CardView, die für RecycleView steht. Ich habe es geschafft, das click -Ereignis innerhalb der ViewHolder-Klasse zu behandeln, aber ich muss die Funktion MainActivity aufrufen. Wie kann ich das mit dem untenstehenden Code implementieren?Klicken Sie in ein RecycleView-Objekt, um mit dem Bild zu arbeiten

Mein Code wie unten

ShopItemRecyclerViewAdapter.java 
public class ShopItemRecyclerViewAdapter extends RecyclerView.Adapter<ShopItemRecyclerViewAdapter.ListItemViewHolder> { 

      static ArrayList<ShopListItemModel> list; 
      LayoutInflater inflater; 

      public ShopItemRecyclerViewAdapter(ArrayList<ShopListItemModel> list, Context context){ 
       inflater = LayoutInflater.from(context); 
       this.list = list; 
      } 



      public ListItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
       View view = inflater.inflate(R.layout.list_item, parent , false); 
       ListItemViewHolder vh = new ListItemViewHolder(view); 
       return vh; 

      } 

      public void onBindViewHolder(ListItemViewHolder holder, int position) { 
       ShopListItemModel current = list.get(position); 
       holder.name.setText(current.getName()); 
       holder.price.setText(String.valueOf(current.getPrice())); 

      } 

      public int getItemCount() { 
       return list.size(); 
      } 

      public static class ListItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
       CardView cv; 
       TextView name; 
       TextView price; 
       ImageButton btnDelete; 

       ListItemViewHolder(final View itemView) { 
        super(itemView); 

        cv = (CardView)itemView.findViewById(R.id.cvShopListItem); 
        name = (TextView)itemView.findViewById(R.id.name); 
        price = (TextView)itemView.findViewById(R.id.price); 
        btnDelete = (ImageButton)itemView.findViewById(R.id.btnDeleteItem); 

        itemView.setOnClickListener(this); 
        btnDelete.setOnClickListener(this); 
       } 

       @Override 
       public void onClick(View v) { 
        //here i can handle the click but i think i need to use it in the main activity 
       } 
      } 
     } 

MainActivity.java (übersprungenen irrelevent Code)

public class ShopCartScreen extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 

    RecyclerView cartItems; //recycler to hold the cart list 
    ArrayList<ShopListItemModel> list = new ArrayList<ShopListItemModel>(); 
    ShopItemRecyclerViewAdapter adapter; 
    GetShopingCartList getShopingCartList; ////instance of network operation class to retrieve shop cart items list from server data base 

    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.shop_carts_list); 
      cartItems = (RecyclerView) findViewById(R.id.newListItem); 
      cartItems.setHasFixedSize(true); 
      LinearLayoutManager llm = new LinearLayoutManager(this); 
      llm.setOrientation(LinearLayoutManager.VERTICAL); 
      cartItems.setLayoutManager(llm) 
    } 

      public void bindData(int listNumber) { 
      getShopingCartList = new GetShopingCartList(this, list, adapter, cartItems, listNumber, totalPrice); 
      getShopingCartList.execute("link to query which returns json object"); 
      } 
    } 

Ge tShopingCartList.java für den Netzbetrieb

public class GetShopingCartList extends AsyncTask<String, String, ArrayList<ShopListItemModel>> { 

      private ArrayList<ShopListItemModel> shopCartItemList; 
      Context context; 
      RecyclerView items; 
      ShopItemRecyclerViewAdapter adapter; 
      int listNumber; 

      public GetShopingCartList(Context context, ArrayList<ShopListItemModel> shopCartItemList, ShopItemRecyclerViewAdapter adapter, 
             RecyclerView items ,int listNumber) { 
       this.context = context; 
       this.shopCartItemList = shopCartItemList; 
       this.adapter = adapter; 
       this.items = items; 
       this.listNumber = listNumber;  
      } 
     protected ArrayList<ShopListItemModel> doInBackground(String... params) { 
       HttpURLConnection connection = null; 
       BufferedReader reader = null; 
       shopCartItemList = new ArrayList<ShopListItemModel>(); 
     try { 
        URL url = new URL(params[0]); 
        connection = (HttpURLConnection) url.openConnection(); 
        connection.connect(); 
        InputStream stream = connection.getInputStream(); 
        reader = new BufferedReader(new InputStreamReader(stream)); 
        StringBuffer buffer = new StringBuffer(); 

        String line = ""; 
        while ((line = reader.readLine()) != null) { 
         buffer.append(line); 

        } 
        String finalJson = buffer.toString(); 
        JSONObject parentObject = new JSONObject(finalJson); 
        JSONArray parentArray = parentObject.getJSONArray("result"); 
     for (int i = 0; i < parentArray.length(); i++) { 
         JSONObject finalObject = parentArray.getJSONObject(i);//get the cuttent json object which is representaion of shop cart model object 

         String name = finalObject.getString("name"); 
         String price = finalObject.getString("price"); 
         Double d = Double.parseDouble(price); 
         ShopListItemModel item = new ShopListItemModel(name, d); 
         shopCartItemList.add(item);//adds the shopcart to the list of shop carts model 

        } 
       } catch (Exception e) { 
        e.printStackTrace(); 

       } finally { 
        if (connection != null) { 
         connection.disconnect(); 
        } 
        try { 
         if (reader != null) { 
          reader.close(); 
         } 
        } catch (IOException e) { 
         e.printStackTrace(); 

        } 
       } 
       return shopCartItemList; 
      } 

      protected void onPostExecute(ArrayList<ShopListItemModel> s) { 
       super.onPostExecute(s); 
       adapter = new ShopItemRecyclerViewAdapter(shopCartItemList, context); 
       items.setAdapter(adapter); 
     } 
       public ArrayList<ShopListItemModel> getList() { 
       return shopCartItemList; 
      } 

     } 
+0

Sie können lokalen Broadcast-Empfänger für diese verwenden .. Erstellen Sie eine Broadcast in 'onClick()' von Adapter und erhalten Sie es in Ihrer ** Aktivität **. Ich kann ein Beispiel geben, wenn Sie umsetzen möchten .. !! –

+0

ich bin ziemlich neu in Android-Entwicklung, krank sein, glücklich zu einem Beispiel mit Erklärungen, wenn Sie damit einverstanden sind. Ich habe auch nie Broadcast-Empfänger überhaupt implementiert –

Antwort

1

Implementieren Sie eine Methode innerhalb ShopCartScreen.java, dann können Sie das context Objekt innerhalb des Adapters verwenden.

((ShopCartScreen)context).methodImplemented(ShopListItemModel model) 
    //add this code inside onClick event of the button 
+0

ich habe es so implementiert. Hauptaktivität: public void deleteItem (int-position) { list = getShopingCartList.getList(); list.remove (Position); adapter = neuer ShopItemRecyclerViewAdapter (list, this); cartItems.setAdapter (Adapter); } funktioniert es, aber natürlich funktioniert die Löschanimation nicht, Sie haben eine Lösung? –

+0

der Button Onclick im viewHolder: public void onClick (View v) { // hier kann ich mit dem Klick umgehen, aber ich denke, ich muss es in der Hauptaktivität verwenden ((ShopCartScreen) -Kontext) .deleteItem (getPosition()); } auch die getPosition ist veraltet –

-1

ok diese meine Lösung ist, wenn jemand es braucht (i kombiniert zwei Methoden/1 in der Haupttätigkeit und 1 in den Recycler-Adapter):

in meinem Recycler Adapter hinzugefügt ich diese Löschmethode:

//delete the item from the recycler Immediately for user interaction 
public void delete(int position){ 
     list.remove(position); 
     notifyItemRemoved(position); 
    } 

in meiner ViewHolder Klasse:

ListItemViewHolder(final View itemView) { 
      super(itemView); 

      cv = (CardView)itemView.findViewById(R.id.cvShopListItem); 
      name = (TextView)itemView.findViewById(R.id.name); 
      price = (TextView)itemView.findViewById(R.id.price); 
      btnDelete = (ImageButton)itemView.findViewById(R.id.btnDeleteItem); 

      itemView.setOnClickListener(this); 
      btnDelete.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      ((ShopCartScreen)context).deleteItem(getPosition());//calls method in main activity 
      delete(getPosition()); 
     } 

und in der Haupttätigkeit:

Verwandte Themen