Ich habe eine einzige ListAdapter
und ListView
RowLayout
, 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);
}
}
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. –
Die Methode in Fragment wird eine Volley-Anfrage starten, so dass ich diese private Methode im Fragment auf Knopf klicken muss Ereignis. –
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. –