2016-04-05 9 views
1

Ich habe eine einzige ListAdapter und ListViewRowLayout, die ich in 2 Fragmente mit ListView s verwendet habe. Das Problem besteht darin, wie Sie mit der ListView Schaltfläche in der Elementzeile umgehen. Es gibt 2 Tasten im allgemeinen RowLayout und diese Tasten haben die gleichen Funktionen unabhängig vom angezeigten Fragment. Ich suchte danach und fand eine Lösung here. Aber in diesem Beitrag ruft der Klick nur eine Aktivität auf, während ich zwei Fragmente habe. Wie stellen wir also sicher, dass in Adapter ein bestimmtes Fragment aufgerufen wird, von dessen Layout-Schaltfläche geklickt wird?Handle ListView Zeile klicken Sie bei Verwendung der gemeinsamen RowLayout

ListAdapter:

public class ListAdapter extends ArrayAdapter<GridItem> { 

    private Context mContext; 
    int resource; 
    private ArrayList<GridItem> mListData = new ArrayList<GridItem>(); 

    public ListAdapter(Context mContext, int resource, ArrayList<GridItem> mListData) { 
     super(mContext, resource, mListData); 
     this.resource = resource; 
     this.mContext = mContext; 
     this.mListData = mListData; 
    } 

    public void setListData(ArrayList<GridItem> mListData) { 
     this.mListData = mListData; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public GridItem getItem(int position) { 
     return super.getItem(position); 
    } 



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

     ViewHolder holder; 
     if (v == null) { 
      holder = new ViewHolder(); 
      LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); 

      v = inflater.inflate(resource, parent, false); 
      holder.image = (ImageView) v.findViewById(R.id.item_image); 
      holder.name = (TextView) v.findViewById(R.id.item_name); 
      holder.regtdemail = (TextView) v.findViewById(R.id.item_regtdemail); 
      holder.follow = (Button)v.findViewById(R.id.follow); 
      holder.remove = (Button)v.findViewById(R.id.remove); 

      v.setTag(holder); 
     } else { 
      holder = (ViewHolder) v.getTag(); 
     } 


     GridItem item = mListData.get(position); 
     Picasso.with(mContext) 
       .load(item.getImage()) 
       .placeholder(R.drawable.placeholder) 
       .fit() 
       .into(holder.image); 
     holder.name.setText(item.getName()); 
     holder.regtdemail.setText(item.getRegtdEmail()); 
     holder.follow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      } 
     }); 

     holder.remove.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      } 
     }); 


     return v; 
    } 

    class ViewHolder { 
     ImageView image; 
     TextView name, regtdemail; 
     Button follow, remove; 
    } 

} 

2. Fragment:

public class SuggestFriend extends Fragment{ 

    private ListView mListView; 
    private GridItem newItem; 
    private ListAdapter mListAdapter; 
    private ArrayList<GridItem> mGridData; 
    public static final String KEY_USERID = "user_id", SPORTS_ID = "sports_id"; 
    private static final String MUTUAL_FOLLOWERS = "http://example.com/api/member/follow-suggestions/"; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.suggestfriend, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     mListView = (ListView)view.findViewById(R.id.list_view); 
     mGridData = new ArrayList<>(); 
     mListAdapter = new ListAdapter(getContext(), R.layout.common_row, mGridData); 
     mListView.setAdapter(mListAdapter); 

     loadmutualfollowers(); 

    } 

    private void loadmutualfollowers() { 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, MUTUAL_FOLLOWERS, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 

         try { 
          JSONObject jObj = new JSONObject(response); 

          System.out.println(jObj); 

          String status = jObj.getString("status"); 

          // Now check status value 
          if (status.equals("0")) { 
           Toast.makeText(getActivity(), "There was some error! Please try again.", Toast.LENGTH_LONG).show(); 
          } else if (status.equals("1")) { 


           JSONArray result = jObj.getJSONArray("result"); 
           for (int i = 0; i < result.length(); i++) { 
            JSONObject json_data = result.getJSONObject(i); 
            String name = json_data.getString("name"); 
            String regtdemail = json_data.getString("username"); 
            String user_id = json_data.getString("user_id"); 

            newItem = new GridItem(); 

            newItem.setName(name); 
            newItem.setRegtdEmail(regtdemail); 
            newItem.setUserId(user_id); 
            if(json_data.has("profile_picture")){ 

             newItem.setImage(json_data.getString("profile_picture")); 

            }else{ 

             Uri path = Uri.parse("android.resource://com.sam.fitlincsearch/" + R.drawable.default_profile); 
             String image_def = path.toString(); 
             newItem.setImage(image_def); 

            } 


            mGridData.add(newItem); 
           } 


           mListAdapter.notifyDataSetChanged(); 

          } else { 
           String errorMsg = jObj.getString("error_msg"); 
           Toast.makeText(getActivity(), errorMsg, Toast.LENGTH_LONG).show(); 
          } 
         } catch (JSONException e) { 
          // JSON error 
          e.printStackTrace(); 
          Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
         } 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(getActivity(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show(); 
      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put(KEY_USERID, "1"); 
       return params; 
      } 

     }; 

     RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
     requestQueue.add(stringRequest); 
    } 
} 

1. Fragment:

public class TopContenders extends Fragment { 

    private ListView mListView; 
    private GridItem newItem; 
    private ListAdapter mListAdapter; 
    private ArrayList<GridItem> mGridData; 
    public static final String KEY_USERID = "user_id", SPORTS_ID = "sports_id"; 
    private static final String TOP_MEMBERS = "http://example.com/api/top-member/"; 
    Button follow, unfollow; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.topcontenders, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     mListView = (ListView)view.findViewById(R.id.list_view); 
     mGridData = new ArrayList<>(); 
     mListAdapter = new ListAdapter(getContext(), R.layout.common_row, mGridData); 
     mListView.setAdapter(mListAdapter); 

     loadtopmembers(); 
    } 

    private void loadtopmembers() { 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, TOP_MEMBERS, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 

         try { 
          JSONObject jObj = new JSONObject(response); 

          System.out.println(jObj); 

          String status = jObj.getString("status"); 

          // Now check status value 
          if (status.equals("0")) { 
           Toast.makeText(getActivity(), "There was some error! Please try again.", Toast.LENGTH_LONG).show(); 
          } else if (status.equals("1")) { 


           JSONArray result = jObj.getJSONArray("result"); 
           for (int i = 0; i < result.length(); i++) { 
            JSONObject json_data = result.getJSONObject(i); 
            String name = json_data.getString("name"); 
            String regtdemail = json_data.getString("username"); 
            String user_id = json_data.getString("user_id"); 
            String sports_id = json_data.getString("sports_id"); 

            newItem = new GridItem(); 

            newItem.setName(name); 
            newItem.setRegtdEmail(regtdemail); 
            newItem.setUserId(user_id); 
            if(json_data.has("profile_picture")) { 
             newItem.setImage(json_data.getString("profile_picture")); 

            }else{ 

             Uri path = Uri.parse("android.resource://com.sam.fitlincsearch/" + R.drawable.default_profile); 
             String image_def = path.toString(); 
             newItem.setImage(image_def); 

            } 
          /*  if(sports_id.equals("1")){ 
             newItem.setSportsId("Weight"); 
            }else if(sports_id.equals("2")){ 
             newItem.setSportsId("Cycle"); 
            }else if(sports_id.equals("3")){ 
             newItem.setSportsId("Swim"); 
            }else if(sports_id.equals("4")){ 
             newItem.setSportsId("Run"); 
            } */ 

            mGridData.add(newItem); 
           } 


           mListAdapter.notifyDataSetChanged(); 

          } else { 
           String errorMsg = jObj.getString("error_msg"); 
           Toast.makeText(getActivity(), errorMsg, Toast.LENGTH_LONG).show(); 
          } 
         } catch (JSONException e) { 
          // JSON error 
          e.printStackTrace(); 
          Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
         } 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(getActivity(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show(); 
      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put(KEY_USERID, "1"); 
       return params; 
      } 

     }; 

     RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
     requestQueue.add(stringRequest); 
    } 
} 

Antwort

0

Sie aktuelle Ansicht Taste können Sie den in Adapterset können getView() Verfahren und in button.setOnClickListener() erhalten diese Ansicht und mach was du willst. Verwenden Sie setTag() und getTag().

Beispiel:

In getView() des Adapters:

holder.btnPlus = (Button) convertView.findViewById(R.id.btnPlusdessert); 
    holder.btnPlus.setTag(R.integer.btnplusview,convertView); 

Knopf des onClickListener()

holder.btnPlus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       View tempView =(View) v.getTag(R.integer.btnplusview); 

Jetzt haben Sie die vollständige Ansicht von Zeilen Layout und Sie können andere Textview oder Taste oder was auch immer kommen mit Tempansicht

+0

Ich verstehe nicht. Wie Sie sehen, habe ich in meinem Adapter bereits den Button clicklistener eingerichtet. Ich möchte nur eine Aufrufanforderung zum Starten einer Methode in dem Fragmentlayout ausführen, das angezeigt wird, wenn ich auf die Schaltflächen klicke. –

+0

Die Methode in Fragment wird eine Volley-Anfrage starten, so dass ich diese private Methode im Fragment auf Knopf klicken muss Ereignis. –

+0

In Button onclick erhalten wir eine Ansicht, die bestimmen wird, auf welche Fragmentansicht geklickt wird, Fragment eins oder zwei. In Ihrer Frage haben Sie gefragt, wie Sie bestimmen können, auf welche Fragmentansicht geklickt wird. Wenn Sie also auf die Schaltfläche klicken, wird Ihnen v.gettag eine Ansicht des Fragments oder der beiden Fragmente anzeigen, je nachdem, welcher Klick angeklickt wird. –

Verwandte Themen