Ich möchte eine ListView
erstellen, wo jeder row
zwei Tasten haben würde. Button1
und Button2
.ListView mit Tasten und statische String Array
Ich habe ein paar Tutorials zum Erstellen von CustomAdapter
oder zum Erweitern von BaseAdapter
gelesen, aber keine von ihnen funktionierte in meinem Fall, deshalb eröffne ich hier eine neue Frage.
Ich habe eine statische (nicht verändern) String Array in meinem strings.xml
:
<string-array name="locations_array">
<item>Item1</item>
<item>Item2</item>
</string-array>
ich dieses Array in meinem Listview verwenden möchten (Ich führe ein normales Listview mit onClick Ereignis zu erstellen, aber jetzt will ich Hinzufügen von Schaltflächen zu jeder Zeile) und Hinzufügen von zwei Schaltflächen zu jeder Zeile, wo jeder sein eigenes onClick-Ereignis hat.
Ich habe Schritte von this answers here und einige andere Tutorials im Web gefolgt, aber ich bekomme immer NullPointerException
beim Versuch, setText
.
CustomAdapter.java:
public class CustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<>();
private Context ctx;
public CustomAdapter(ArrayList<String> list, Context ctx){
this.list = list;
this.ctx = ctx;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
Log.d("TAG", list.get(position));
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if(view == null){
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.layout_listview,null);
}
Log.d("TAG", list.get(position));
TextView listItemText = (TextView) view.findViewById(R.id.list_item_string);
listItemText.setText(list.get(position));
Button localData = (Button) view.findViewById(R.id.button1);
Button onlineData = (Button) view.findViewById(R.id.button2);
localData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
onlineData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return view;
}
}
Und hier verwende ich den Adapter in meinem Fragment:
locationsArray = getResources().getStringArray(R.array.locations_array);
ArrayList<String> data = new ArrayList<>(Arrays.asList(locationsArray));
CustomAdapter adapter = new CustomAdapter(data,getActivity());
listView.setAdapter(adapter);
Aber das funktioniert nicht. Alle Tutorials konzentrieren sich auf etwas anderes als das, was ich brauche. Ich brauche einfach nur zwei Knöpfe in jeder Reihe, mit vorhandenem String Array. Ich möchte nichts dynamisch hinzufügen usw. Verwenden Sie einfach das String-Array, das ich bereits erstellt habe.
EDIT (Hinzufügen von XML-Dateien habe ich vergessen!)
R.layout.layout_listview (die EditText ist die Liste zu filtern):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/et_filter"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:hint="Search Location">
</EditText>
<ListView
android:id="@+id/list"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</ListView>
</LinearLayout>
R.layout.layout_listview_buttons:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/list_item_string"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:paddingLeft="8dp"
android:textSize="18sp"
android:textStyle="bold" />
<Button
android:id="@+id/button1"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="Online Data"
android:textColor="#0099CC" />
<Button
android:id="@+id/button2"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_below="@+id/button1"
android:layout_marginTop="3dp"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="Local Data"
android:textColor="#0099CC" />
</RelativeLayout>
LogCat Ausnahme:
12-15 11:24:10.852 14626-14626/com.inodroid.myweatherapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.inodroid.myweatherapp, PID: 14626
java.lang.NullPointerException
at com.inodroid.myweatherapp.Data.CustomAdapter.getView(CustomAdapter.java:59)
Zeile im Code:
listItemText.setText(list.get(position));
Hoffnung mir hier jemand helfen kann.
Prost
Bitte fügen Sie Ihre R.layout.layout_listview Datei :-) – Kelevandos
@ Kelevandos aah, sorry, weiß nicht, wie ich vergessen habe, XML-Dateien hinzuzufügen. Ich stelle beide auf! –
Ich denke, dass der Stack-Trace auch nützlich sein wird – Lampapos