Я пытаюсь создать элемент в ListView, который отображает несколько текстовых представлений и пользовательский вид, в котором я планирую рисовать на холсте, переопределяя onDraw (). Метод, который я пытаюсь использовать, прекрасно работает только с TextViews, но не работает, когда я пытаюсь использовать пользовательский элемент (Graph), поэтому проблема определенно заключается здесь.
У меня есть следующий XML-файл, который я использую в качестве макета для каждого элемента ListView:
year_row.xml:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/year_row_linear"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="6dp"
>
<TextView android:id="@+id/year_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20dip"
android:textColor="@android:color/white"
/>
<com.android.gradetracker.Graph android:id="@+id/year_graph"
android:layout_width="fill_parent"
android:layout_height="50dip"
/>
<TextView android:id="@+id/year_average"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
/>
<TextView android:id="@+id/year_progress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
Мой класс класса выглядит следующим образом:
Graph.java:
package com.android.gradetracker;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
public class Graph extends View {
public Graph(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
// to test if it works
canvas.drawColor(Color.WHITE);
super.onDraw(canvas);
}
}
Мой основной класс, который устанавливает элементы ListView, содержит следующий код:
private ArrayList <HashMap<String,Object>> list = new ArrayList <HashMap<String,Object>>();
private SimpleAdapter adapter;
private ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listview);
listView.setClickable(true);
String[] from = {"name", "graph", "average", "progress"};
int[] to = new int[] {R.id.year_name, R.id.year_graph, R.id.year_average, R.id.year_progress};
adapter = new SimpleAdapter(this.getApplicationContext(), list, R.layout.year_row, from, to);
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
public void addYear(String name) {
Graph graph = new Graph(this);
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("name", name);
map.put("graph", graph);
map.put("average", "--%");
map.put("progress", "--/--%");
list.add(map);
adapter.notifyDataSetChanged();
}
Как я уже сказал, удалив все ссылки на класс Graph, приложение работает нормально. У меня просто проблемы с отображением графика.
Logcat выдает ошибку:
08-04 17:09:50.415: ERROR/AndroidRuntime(397): android.view.InflateException: Binary XML file line #16: Error inflating class com.android.gradetracker.Graph
Заранее спасибо за любую помощь.