So mache ich eine App, wo eine der Funktionen Sie sind in der Lage, Warnungen einzustellen. Im Folgenden finden Sie 2 Beispielbenachrichtigungen, bei denen ich einen Adapter zum Einfügen in eine ListView verwendet habe. Jedes Element verfügt über eine ImageView, eine TextView und eine andere ImageView.So fügen Sie einen onClickListener zu verschiedenen Elementen in einer ListView-Zeile hinzu
Meine Frage ist, wie würde ich auf einem onClickListener
für die verschiedene Bilder drehen und vielleicht sogar der Text je nachdem, wie ich die Dinge tun.
Zum Beispiel, wenn Sie auf das "x" klicken, wird dieser Alarm aus der Liste gelöscht (zeigt mir, wie zu tun und lassen Sie den Adapter wissen, dass eine Warnung gelöscht wurde, wäre cool) oder klicken Sie auf das Warnbild würde aktivieren/deaktivieren der Alarm (der zwischen den beiden gesehenen Bildern wechseln würde).
Dieser Bildschirm wird von einem MainActivity
aufgeblasen, der eine AlertFragment
aufbläst. In der Vergangenheit hatte ich Probleme mit der Implementierung innerer Klassen, aber die Art und Weise, wie ich sie eingerichtet habe, ist (denke ich) mit Fragmenten, die innere Klassen implementieren. Dies ist, was ich derzeit habe, was ich weiß, ist falsch:
public class AlertsFragment extends Fragment {
private ListView mListView;
private List<Alert> alerts = new ArrayList<>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_alerts, container, false);
mListView = (ListView) rootView.findViewById(R.id.alerts_list_view);
alerts.add(new Alert(1, 5400, true));
alerts.add(new Alert(2, 120, false));
AlertsAdapter adapter = new AlertsAdapter(getActivity(), R.layout.alert_item_row, alerts);
mListView.setAdapter(adapter);
getActivity().setTitle(new AlertsItem().getLabel());
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
Log.d("matt", "list_item");
ImageView img = (ImageView) getActivity().findViewById(R.id.active_image);
img.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d("matt", "image");
alerts.get(position).setActive(!alerts.get(position).isActive());
}
});
}
});
return rootView;
}
}
Jede Hilfe, die Sie geben können, würde geschätzt werden, danke.
---------------------------------------------- ----------- EDIT -------------------------------------- -------------------
Wie einige, hier angefordert ist mein ArrayAdapter Code:
/**
* Adapter for adding Alerts to ListView
*/
public class AlertsAdapter extends ArrayAdapter {
private int resource;
List<Alert> objects;
public AlertsAdapter(Context context, int resource, List<Alert> objects) {
super(context, resource, objects);
this.resource = resource;
this.objects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
AlertHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater();
row = inflater.inflate(resource, parent, false);
holder = new AlertHolder();
holder.imgActive = (ImageView)row.findViewById(R.id.active_image);
holder.txtTitle = (TextView)row.findViewById(R.id.txt_title);
holder.txtTime = (TextView)row.findViewById(R.id.txt_time);
row.setTag(holder);
}
else {
holder = (AlertHolder)row.getTag();
}
Alert alert = (Alert) getItem(position);
int image;
if (alert.isActive()) {
image = R.drawable.ic_alert_active_medium;
}
else {
image = R.drawable.ic_alert_inactive_medium;
}
holder.imgActive.setImageResource(image);
holder.txtTitle.setText("Route " + Integer.toString(alert.getRoute()));
int min = alert.getTime()/60;
int hr = min/60;
min = min % 60;
holder.txtTime.setText(((hr == 0) ? "" : (Integer.toString(hr) + " hr ")) + Integer.toString(min) + " min ");
return row;
}
private static class AlertHolder {
ImageView imgActive;
TextView txtTitle;
TextView txtTime;
}
}
Versuchen Sie, 'android: gravity =" center "' zu 'GridView' hinzuzufügen? –
Das ist nicht, was ich frage, ich frage, wie man einen onClickListener für die Bilder aufstellt. – argetlam5
Fügen Sie Ihren benutzerdefinierten ArrayAdapter-Code hinzu. Wenn Sie die verschiedenen Teile eines Zeilenelements aufblasen, fügen Sie die OnClickListeners hinzu. – Enpi