2016-04-05 1 views
1

ListViewを持つ2つのフラグメントで使用したListAdapterListViewRowLayoutの1つがあります。問題は、アイテム行のボタンクリックをListViewで処理する方法です。共通のRowLayoutには2つのボタンがあり、これらのボタンは表示されているフラグメントに関係なく同じ機能を持ちます。私はそれを探して解決策を見つけたhere。しかし、このポストボタンでは、2つのフラグメントがあるうちに、1つのアクティビティのみをコールします。では、レイアウトボタンがクリックされた特定のフラグメントを呼び出すために、アダプタでどのようにしたらよいでしょうか?一般的な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; 
    } 

} 

第二の断片:

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); 
    } 
} 

第一の断片:あなたは、アダプタのgetView()方法でボタンに現在のビューを設定することができ、button.setOnClickListener()にあなたが得ることができる

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); 
    } 
} 

答えて

0

あなたが望むものを何でもしてください。 setTag()getTag()を使用してください。

例:アダプタのgetView()

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

ボタンのonClickListener()

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

今、あなたは、行レイアウトの完全なビューを持っていて、他のTextViewまたはボタンを取得したり、何でもとすることができますtempView。

+0

わかりません。ご覧のとおり、私のアダプターでは、すでにボタンのクリックリスナーを設定しています。私は、ボタンをクリックしたときに表示されているフラグメントのレイアウトでメソッドを開始するように呼び出すようにしたいだけです。 –

+0

フラグメントのメソッドはボレーリクエストを開始するので、ボタンのクリックイベントでこのプライベートメソッドをフラグメントで呼び出す必要があります。 –

+0

ボタンのonclickでは、どのフラグメントのビューがクリックされたか、1つまたは2つのフラグメントになるかを決定する1つのビューが取得されています。あなたの質問では、どのフラグメントのビューがクリックされたかを確認する方法を尋ねられました。ボタンをクリックすると、v.gettagは、クリックされたフラグメントまたは2つのビューを表示します。 –

関連する問題