2014-10-16 7 views
0

Я пытаюсь добавить ListView и настраиваемое представление в моем макете, но я всегда получаю эту ошибку:Android: пользовательский вид в XML-макете

»... Ошибка при наполнении класса com.example .. . "

Без пользовательского вида он работает, и отображается только ListView.


активность:

package com.example.training; 

public class PracticeActivity extends ActionBarActivity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.practice_layout); 
     initListView(); //private function 
    } 
    //Other stuff 
} 

на заказ Вид:

package com.example.training; 

public class LinearChart extends View{ 

    LinearChart(Context context, AttributeSet attrs){ 
     super(context,attrs); 
    } 

    LinearChart(Context context){ 
     super(context); 
    } 

    LinearChart(Context context, AttributeSet attrs, int defStyle){ 
     super(context,attrs, defStyle); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawColor(Color.WHITE); 
     Paint paint = new Paint(); 
     paint.setColor(Color.BLUE); 
     paint.setStrokeWidth(10); 
     canvas.drawLine(10, 10, 30, 30, paint); 
    } 
} 

XML-макета:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ListView 
     android:id="@+id/practice_listview" 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:layout_centerHorizontal="true" > 
    </ListView> 

    <view 
     android:id="@+id/view1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/practice_listview" 
     class="com.example.training.LinearChart" /> 

</RelativeLayout> 
+0

Убедитесь, что вы очистили проект, чтобы обновить сгенерированные файлы. –

ответ

1

На вашем классе нет общественных конструкторов. Убедитесь, что вы переопределите конструкторы. Он должен выглядеть следующим образом, вместо:

public LinearChart(Context context, AttributeSet attrs){ 
     super(context,attrs); 
    } 

    public LinearChart(Context context){ 
     super(context); 
    } 

    public LinearChart(Context context, AttributeSet attrs, int defStyle){ 
     super(context,attrs, defStyle); 
    } 

Обратите внимание на зависимость от public модификатора.

+0

Не могу поверить, что это решение: D Спасибо большое – S1J0

+0

Вы можете проверить свой логарифм для получения дополнительной информации. Normaly this will throw 'Caused by: java.lang.NoSuchMethodException: [class android.content.Context, interface android.util.AttributeSet]', который сообщает вам, что конструктор не найден. Модификатор доступа по умолчанию является приватным, поэтому 'LayoutInflater' не смог его найти. Хорошего дня. –

0
<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ListView 
    android:id="@+id/practice_listview" 
    android:layout_width="match_parent" 
    android:layout_height="300dp" 
    android:layout_centerHorizontal="true" > 
</ListView> 

<com.example.training.LinearChart 
    android:id="@+id/view1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_below="@+id/practice_listview" 
    /> 

    </RelativeLayout> 
+1

То же самое, что и код OP. –

+0

показать мне исключение. но сначала очистите проект и перестройте его, поместив мой код в xml. –

0

Вместо <view в вашем XML-файле, вам нужно полное имя класса (или использовать новое пространство имен xml). Таким образом, в данном примере, ваш XML может выглядеть следующим образом:

<com.example.training.LinearChart 
    android:id="@+id/view1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 

(и, следовательно, удалить класс: атрибут в текущем XML). Это должно затем раздуваться правильно.

+1

То же самое. Вам не нужно «делать» это. –

Смежные вопросы