- Forum-Beiträge: 4
09.01.2015, 22:21:24 via Website
09.01.2015 22:21:24 via Website
Hallo,
ich habe mir eine kleine Android App gebastelt, die auf dem Beispielcode für die ExpandableListView von dem Vogella listview Tutorial basiert (Nr.15).
Ich habe das Ganze so geändert, dass in der Liste zunächst einfach nur für jeden Listeneintrag der Tag und Monat angezeigt wird. Wenn ich die App nun im Emulator laufen lasse, spuckt die Logcat mir folgendes aus (hab nur die ErrorZeilen kopiert):
01-09 19:50:56.528: E/AndroidRuntime(2316): FATAL EXCEPTION: main
01-09 19:50:56.528: E/AndroidRuntime(2316): Process: com.vogella.android.listview.expandable, PID: 2316
01-09 19:50:56.528: E/AndroidRuntime(2316): android.content.res.Resources$NotFoundException: String resource ID #0x5
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.content.res.Resources.getText(Resources.java:274)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.TextView.setText(TextView.java:4122)
01-09 19:50:56.528: E/AndroidRuntime(2316): at com.vogella.android.listview.expandable.MyExpandableListAdapter.getGroupView(MyExpandableListAdapter.java:96)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:446)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.AbsListView.obtainView(AbsListView.java:2344)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.ListView.measureHeightOfChildren(ListView.java:1270)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.ListView.onMeasure(ListView.java:1182)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.View.measure(View.java:17430)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1083)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.LinearLayout.onMeasure(LinearLayout.java:615)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.View.measure(View.java:17430)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.View.measure(View.java:17430)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
01-09 19:50:56.528: E/AndroidRuntime(2316): at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:447)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.View.measure(View.java:17430)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
01-09 19:50:56.528: E/AndroidRuntime(2316): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.View.measure(View.java:17430)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.Choreographer.doCallbacks(Choreographer.java:580)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.Choreographer.doFrame(Choreographer.java:550)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.os.Handler.handleCallback(Handler.java:739)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.os.Handler.dispatchMessage(Handler.java:95)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.os.Looper.loop(Looper.java:135)
01-09 19:50:56.528: E/AndroidRuntime(2316): at android.app.ActivityThread.main(ActivityThread.java:5221)
01-09 19:50:56.528: E/AndroidRuntime(2316): at java.lang.reflect.Method.invoke(Native Method)
01-09 19:50:56.528: E/AndroidRuntime(2316): at java.lang.reflect.Method.invoke(Method.java:372)
01-09 19:50:56.528: E/AndroidRuntime(2316): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
01-09 19:50:56.528: E/AndroidRuntime(2316): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Ich werde daraus nicht schlau. Es wird kein CausedBy:... Ausdruck angezeigt, deshalb weiß ich nicht, wie ich vorgehen soll, um den Fehler zu finden. Im Debugger hab ich es mittels ResourcesNotFoundException-Breakpoint versucht, aber da kommt dann auch nur folgendes:
Wenn ich da dann die Android.jar Datei in dem Programmverzeichnis als Source auswähle ändert sich nichts. Andere Apps gehen ganz normal, auch das ExpandableList Beispiel aus dem Link oben. Weiß jemand Rat? Muss ich da mein Eclipse neu aufsetzen?
Hier nochmal mein abgeänderter Code:
package com.vogella.android.listview.expandable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import android.app.Activity;
import android.os.Bundle;
import android.util.SparseArray;
import android.view.Menu;
import android.widget.ExpandableListView;
import java.lang.StringBuffer;
public class MainActivity extends Activity {
ArrayList<CurrentDay> currentweek = new ArrayList<CurrentDay>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setCurrentWeek();
ExpandableListView listView = (ExpandableListView) findViewById(R.id.listView);
MyExpandableListAdapter adapter = new MyExpandableListAdapter(this,
currentweek);
listView.setAdapter(adapter);
}
public void setCurrentWeek() {
Calendar cal = new GregorianCalendar();
int numDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
CurrentDay day = null;
for (int i = 0; i < 7; i++){
if (Calendar.DAY_OF_MONTH+i > numDays){
for (int h = 0; h < 7 - i; h++){
day = new CurrentDay(1+h, Calendar.MONTH+1);
currentweek.add(day);
}
}
else {
day = new CurrentDay(Calendar.DAY_OF_MONTH+i, Calendar.MONTH);
}
for (int j = 0; j < 5; j++) {
day.children.add(+ j);
}
currentweek.add(day);
}
}
}
package com.vogella.android.listview.expandable;
import java.util.ArrayList;
import android.app.Activity;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckedTextView;
import android.widget.TextView;
import android.widget.Toast;
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
private final ArrayList<CurrentDay> currentweek;
public LayoutInflater inflater;
public Activity activity;
public MyExpandableListAdapter(Activity act, ArrayList<CurrentDay> currentweek) {
activity = act;
this.currentweek = currentweek;
inflater = act.getLayoutInflater();
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return currentweek.get(groupPosition).children.get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final String children = (String) getChild(groupPosition, childPosition);
TextView text = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.listrow_details, null);
}
text = (TextView) convertView.findViewById(R.id.textView1);
text.setText(children);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Intent to start DetailedViewActivity
Toast.makeText(activity, children,
Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return currentweek.get(groupPosition).children.size();
}
@Override
public Object getGroup(int groupPosition) {
return currentweek.get(groupPosition);
}
@Override
public int getGroupCount() {
return currentweek.size();
}
@Override
public void onGroupCollapsed(int groupPosition) {
super.onGroupCollapsed(groupPosition);
}
@Override
public void onGroupExpanded(int groupPosition) {
super.onGroupExpanded(groupPosition);
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.listrow_group, null);
}
CurrentDay currentday = (CurrentDay) getGroup(groupPosition);
((CheckedTextView) convertView).setText(currentday.day);
((CheckedTextView) convertView).setChecked(isExpanded);
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
package com.vogella.android.listview.expandable;
import java.util.ArrayList;
import java.util.List;
public class CurrentDay {
public int day;
public int month;
public final ArrayList<Integer> children = new ArrayList<Integer>();
public CurrentDay(int day, int month) {
this.day = day;
this.month = month;
}
}
activity_main.xml:
<LinearLayout xmlns:android="link den ich hier leider noch nicht posten kann"
xmlns:tools="link den ich hier leider noch nicht posten kann"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ExpandableListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ExpandableListView>
listrow_groups.xml:
<CheckedTextView xmlns:android="link den ich hier leider noch nicht posten kann"
xmlns:tools="link den ich hier leider noch nicht posten kann"
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeight"
android:layout_marginLeft="8dp"
android:drawableRight="@drawable/ic_launcher"
android:gravity="left"
android:paddingLeft="32dp"
android:paddingTop="8dp"
android:text="Test"
android:textSize="14sp"
android:textAlignment="textEnd"
android:textStyle="bold" />
listrow_details.xml:
<LinearLayout xmlns:android="link den ich hier leider noch nicht posten kann"
xmlns:tools="link den ich hier leider noch nicht posten kann"
android:layout_width="match_parent"
android:layout_height="40dp"
android:clickable="true"
android:orientation="vertical"
android:paddingLeft="40dp"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_launcher"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:text="@string/hello_world"
android:textSize="14sp"
android:textStyle="bold" >
</TextView>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/black" />
strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<string name="app_name">ListViewExpandableCopy</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
— geändert am 10.01.2015, 11:04:38
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.