Custom-View in xml

  • Antworten:7
  • Bentwortet
Aaron B.
  • Forum-Beiträge: 206

07.07.2013, 08:29:21 via App

Hallo

Ich versuche, einen Custom-View (Extends ScrollView) in meiner xml-Datei zu nutzen. Leider stürzt das Ganze ab.

Mein Code:
1package de.wypeedit.classes;
2
3import android.content.*;
4import android.graphics.*;
5import android.view.*;
6import android.widget.*;
7
8public class FixedListView extends ScrollView
9{
10
11 Context c;
12 Adapter adapter;
13
14 FixedListView.OnItemClickListener clickListener;
15 FixedListView.OnItemLongClickListener longClickListener;
16
17 public FixedListView(Context c) {
18 super(c);
19 this.c = c;
20 }
21
22 public void setAdapter(Adapter adapter) {
23 this.adapter = adapter;
24 notifyChanges();
25 }
26
27 public Adapter getAdapter() {
28 return adapter;
29 }
30
31 public void setOnItemClickListener(FixedListView.OnItemClickListener clickListener) {
32 this.clickListener = clickListener;
33 notifyChanges();
34 }
35
36 public void setOnItemLongClickListener(FixedListView.OnItemLongClickListener longClickListener) {
37 this.longClickListener = longClickListener;
38 notifyChanges();
39 }
40
41 public void notifyChanges() {
42 removeAllViews();
43 LinearLayout layout = new LinearLayout(c);
44 layout.setOrientation(LinearLayout.VERTICAL);
45
46 if(adapter != null) {
47 for(int i = 0; i < adapter.getCount(); i ++) {
48 View resd = null;
49 resd = adapter.getView(i, resd, this);
50
51 Boolean clicki = false;
52
53 Button res = new Button(c);
54
55 final View fres = res;
56 final int fi = i;
57
58 if(clickListener != null) {
59 res.setClickable(true);
60 clicki = true;
61 }
62
63 if(longClickListener != null) {
64 res.setLongClickable(true);
65 clicki = true;
66 }
67
68 if(clickListener != null) {
69 res.setOnClickListener(new OnClickListener() {
70 public void onClick(View v) {
71 clickListener.onItemClick(fres, fi);
72 }
73 });
74 }
75
76 if(longClickListener != null) {
77 res.setOnLongClickListener(new OnLongClickListener() {
78 public boolean onLongClick(View v) {
79 longClickListener.onItemLongClick(fres, fi);
80
81 return true;
82 }
83 });
84 }
85
86 RelativeLayout.LayoutParams resdlay = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
87 resdlay.bottomMargin = 5;
88
89 RelativeLayout resL = new RelativeLayout(c);
90 resd.setLayoutParams(resdlay);
91 res.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT));
92 res.setBackgroundResource(de.wypeedit.R.drawable.flvbg);
93 resL.addView(resd);
94 if(clicki) {
95 resL.addView(res);
96 }
97
98 layout.addView(resL);
99 }
100
101 addView(layout);
102 }
103 }
104
105 public interface OnItemClickListener {
106 public void onItemClick(View v, int position);
107 }
108
109 public interface OnItemLongClickListener {
110 public boolean onItemLongClick(View v, int position);
111 }
112
113}

Und in meiner xml-Datei:
1<de.wypeedit.classes.FixedListView
2 android:layout_width="fill_parent"
3 android:layout_height="wrap_content" />

Was ist daran falsch?

LG

Antworten
Aaron B.
  • Forum-Beiträge: 206

07.07.2013, 10:42:06 via App

Gibts nicht... Ich habe keinen PC und programmiere mit einer Android-App (AIDE), die dann die App installiert, statt sie in einem Emu zu starten.

LG

Antworten
Andy N.
  • Forum-Beiträge: 3.112

07.07.2013, 10:49:07 via Website

Dennoch legt Android Logdatein an, die man zB mit einer App auslesen kann.

Aber mit Android zu programmieren ist doch nicht wirklich praktikabel.

Antworten
Aaron B.
  • Forum-Beiträge: 206

07.07.2013, 11:46:17 via App

Für ein Logcat müsste ich mein Gerät rooten.
Und natürlich wäre das Programmieren am PC besser, aber ich habe keinen (und hab kein Geld dafür :D)

LG

Antworten
impjor
  • Forum-Beiträge: 1.793

07.07.2013, 19:33:34 via App

Eine App ohne Logcat zu entwickeln, ist ein Ding der Unmöglichkeit. Für kleine 3-Klassen-Projekte mag das noch (irgendwie) möglich sein, aber spätestens dann wirds problematisch.
Du solltest versuchen irgendeine Form eines Debuggers zu nutzen, der z.B. jede Zeile einzeln abarbeitet, um so den Fehler lokalisieren zu können. Oder du rootest dein Gerät :D

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Aaron B.
  • Forum-Beiträge: 206

07.07.2013, 20:39:01 via App

Ja ich denke über root nach. :)

LG

Antworten
Aaron B.
  • Forum-Beiträge: 206

26.07.2013, 18:00:04 via App

Also für Programmierer mit dem selben Problem:

Man muss zusätzlich noch folgendes hinzufügen:

1public CustomView(Context c, AttributeSet attr) {
2super (c, attr);
3}

Antworten