私がしていること:
地図やルートなどに関係するAndroidアプリを書いています。アプリのホーム画面には、お気に入りページを開くボタンがあります。お気に入りページは、次のxmlレイアウトで構成されています。
layout_favorites.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/mainscreen2">
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbarSize="0dp"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/imageViewfavorites"
android:scaleType="fitEnd"
android:layout_marginTop="10dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_width="60px"
android:layout_height="60px"
android:src="@drawable/android_button_44_2"/>
<TextView
android:id="@+id/textview_favorites"
android:background="@null"
android:scaleType="fitEnd"
android:layout_marginTop="15dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_width="wrap_content"
android:layout_height="60px"
android:textSize="35sp"
android:textColor="#000000"
android:text="Favorites"/>
</LinearLayout>
</HorizontalScrollView>
<ListView
android:id="@+id/listview_favorites"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="45dp"
android:cacheColorHint="#00000000"
>
</ListView>
</LinearLayout>
これは正常に機能しています。心配はいりません。上部のレイアウトには、ListViewがあることがわかります。そのListViewに次のような行を入力したいと思います。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dip" >
<ImageView
android:id="@+id/route_image"
android:layout_width="50dip"
android:layout_height="50dip"/>
<TextView
android:id="@+id/route_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/route_image"
android:layout_toRightOf="@+id/route_image"
android:textColor="#000000"
android:textSize="15dip"
android:textStyle="bold"/>
<TextView
android:id="@+id/route_author"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/route_title"
android:textColor="#000000"
android:textSize="10dip"
android:layout_marginTop="1dip"
android:layout_toRightOf="@+id/thumbnail"/>
<TextView
android:id="@+id/route_length"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@id/route_title"
android:gravity="right"
android:layout_marginRight="5dip"
android:textSize="10dip"
android:textColor="#10bcc9"
android:textStyle="bold"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/arrow"/>
</RelativeLayout>
したがって、最終的には、次のようになります。
(ペイントで描かれた画像:p) http://s9.postimage.org/cgcahc1i7/Untitled.png
また
http://imageshack.us/photo/my-images/694/67362201.png/
ここで問題が発生します。表示されません。BaseAdapterクラスを拡張してリストビューを処理し、ビューなどを拡張するカスタムアダプタを使用しています。Adapaterを投稿してから、[お気に入り]画面のアクティビティを投稿します。
アダプタークラス:
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/**
*
* @author Gideon
*/
public class Adapter_Maplist_Page_Favorites extends BaseAdapter
{
//----------------------------------------
// Variables
//----------------------------------------
private Context context;
private final Drawable[] drawables;
private final String[] titles;
private final String[] authors;
private final String[] durations;
//----------------------------------------
//----------------------------------------
// Methods
//----------------------------------------
public Adapter_Maplist_Page_Favorites(Context context ,String[] titles,String[] authors,String[] durations,Drawable[] drawables)
{
this.context = context;
this.titles = titles;
this.authors = authors;
this.durations = durations;
this.drawables = drawables;
}
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.layout_favorites_row, parent);
ImageView map_image = (ImageView) rowView.findViewById(R.id.route_image);
TextView map_title = (TextView) rowView.findViewById(R.id.route_title);
TextView map_author = (TextView) rowView.findViewById(R.id.route_author);
TextView map_length = (TextView) rowView.findViewById(R.id.route_length);
ImageView map_image_arrow = (ImageView) rowView.findViewById(R.drawable.arrow);
map_image.setBackgroundDrawable(drawables[position]);
map_title.setText(titles[position]);
map_author.setText(authors[position]);
map_length.setText(durations[position]);
map_image_arrow.setBackgroundDrawable(map_image_arrow.getBackground());
return rowView;
}
//----------------------------------------
//----------------------------------------
// Not Implemented
//----------------------------------------
public Object getItem(int arg0)
{
return null;
}
public long getItemId(int position)
{
return 0;
}
public int getCount()
{
throw new UnsupportedOperationException("Not supported yet.");
}
//----------------------------------------
//----------------------------------------
}
お気に入りのアクティビティクラス:
import android.app.ListActivity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
/**
*
* @author Gideon
*/
public class Page_Favorites extends ListActivity
{
//---------------------------------------------------------------------------------------------------------------
//Hierdie info sal in die toekoms vanaf die databsae moet kom of net vervang word met die database entries in for loops etc. (This info will be loaded from the database in the future)
//---------------------------------------------------------------------------------------------------------------
public final String[] map_titles = {"Route 1","Route 2","Route 3","Route 4","Route 5","Route 6"};
public final String[] map_authors = {"Jannie","Sannie","Bennie","Kosie","Gideon","Alex"};
public final String[] map_lengths = {"42km","2km","21.5km","8km","34km","23km"};
ImageView iv = (ImageView) findViewById(R.drawable.route_image_1);
public final Drawable[] map_images = {iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground()};
//---------------------------------------------------------------------------------------------------------------
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
overridePendingTransition(R.layout.animation_fadein, R.layout.animation_fadeout);
setContentView(R.layout.layout_favorites);
// ToDo add your GUI initialization code here
ListView list = (ListView) findViewById(R.id.listview_favorites);
list.setAdapter(new Adapter_Maplist_Page_Favorites(this, map_titles, map_authors, map_lengths, map_images));
list.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
Toast.makeText(Page_Favorites.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
}
ボタンをクリックしてお気に入り画面/アクティビティを起動し、リストビューを作成すると、アプリケーションはエラーで終了します(強制終了されました...)。任意のヘルプやアイデアをいただければ幸いです。どうも。
編集:
Adbログエラー:
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime FATAL EXCEPTION: main
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{RedPheasant.LoggerApp/RedPheasant.LoggerApp.Page_Favorites}: java.lang.NullPointerException
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at android.app.ActivityThread.access$1500(ActivityThread.java:117)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:99)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at android.os.Looper.loop(Looper.java:123)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:3687)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:507)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at dalvik.system.NativeStart.main(Native Method)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime Caused by: java.lang.NullPointerException
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at RedPheasant.LoggerApp.Page_Favorites.onCreate(Page_Favorites.java:48)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
22:54:21.505 24082 ERROR RedPheasant.LoggerApp AndroidRuntime ... 11 more
22:54:21.515 212 ERROR #212 Dumpstate > /data/log/dumpstate_app_error
また、この部分を修正しました:
public int getCount()
{
if(titles == null)
{
return 0;
}
return titles.length;
}
それでも同じ問題が発生します。 編集2:
さて、これまでのすべての助けに感謝します...
私はさらにこれを変更しました:
新しいお気に入りページアクティビティ(変更):
public class Page_Favorites extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
overridePendingTransition(R.layout.animation_fadein, R.layout.animation_fadeout);
setContentView(R.layout.layout_favorites);
// ToDo add your GUI initialization code here
//---------------------------------------------------------------------------------------------------------------
//Hierdie info sal in die toekoms vanaf die databsae moet kom of net vervang word met die database entries in for loops etc.
//---------------------------------------------------------------------------------------------------------------
String[] map_titles = {"Route 1","Route 2","Route 3","Route 4","Route 5","Route 6"};
String[] map_authors = {"Jannie","Sannie","Bennie","Kosie","Gideon","Alex"};
String[] map_lengths = {"42km","2km","21.5km","8km","34km","23km"};
//ImageView iv = (ImageView) findViewById(R.drawable.route_image_1);
Drawable d = getResources().getDrawable(R.drawable.route_image_1);
Drawable[] map_images = {d,d,d,d,d,d};
Drawable d2 = getResources().getDrawable(R.drawable.arrow);
//---------------------------------------------------------------------------------------------------------------
ListView list = (ListView) findViewById(R.id.listview_favorites);
list.setAdapter(new Adapter_Maplist_Page_Favorites(this, map_titles, map_authors, map_lengths, map_images,d2));//lika a boss itches
list.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
Toast.makeText(Page_Favorites.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
}
新しいアダプタクラス(変更):
public class Adapter_Maplist_Page_Favorites extends BaseAdapter
{
//----------------------------------------
// Variables
//----------------------------------------
private Context context;
private final Drawable[] drawables;
private final String[] titles;
private final String[] authors;
private final String[] durations;
private final Drawable d;
//----------------------------------------
//----------------------------------------
// Methods
//----------------------------------------
public Adapter_Maplist_Page_Favorites(Context context ,String[] titles,String[] authors,String[] durations,Drawable[] drawables,Drawable d)
{
this.context = context;
this.titles = titles;
this.authors = authors;
this.durations = durations;
this.drawables = drawables;
this.d = d;
}
//----------------------------------------
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.layout_favorites_row, parent);
ImageView map_image = (ImageView) rowView.findViewById(R.id.route_image);
TextView map_title = (TextView) rowView.findViewById(R.id.route_title);
TextView map_author = (TextView) rowView.findViewById(R.id.route_author);
TextView map_length = (TextView) rowView.findViewById(R.id.route_length);
ImageView map_image_arrow = (ImageView) rowView.findViewById(R.id.route_arrow);
map_image.setBackgroundDrawable(drawables[position]);
map_title.setText(titles[position]);
map_author.setText(authors[position]);
map_length.setText(durations[position]);
map_image_arrow.setBackgroundDrawable(d);
return rowView;
}
//----------------------------------------
//----------------------------------------
// Not Implemented
//----------------------------------------
public Object getItem(int arg0)
{
return null;
}
public long getItemId(int position)
{
return 0;
}
public int getCount()
{
if(titles == null)
{
return 0;
}
return titles.length;
}
//----------------------------------------
//----------------------------------------
}
そして、新しいエラーログアドブログ:
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime FATAL EXCEPTION: main
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.AdapterView.addView(AdapterView.java:461)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.view.LayoutInflater.inflate(LayoutInflater.java:416)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at RedPheasant.LoggerApp.Adapter_Maplist_Page_Favorites.getView(Adapter_Maplist_Page_Favorites.java:73)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.AbsListView.obtainView(AbsListView.java:1554)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.ListView.makeAndAddView(ListView.java:1793)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.ListView.fillDown(ListView.java:718)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.ListView.fillFromTop(ListView.java:775)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.ListView.layoutChildren(ListView.java:1646)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.AbsListView.onLayout(AbsListView.java:1384)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.view.View.layout(View.java:7228)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.view.ViewRoot.performTraversals(ViewRoot.java:1147)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.view.ViewRoot.handleMessage(ViewRoot.java:1867)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:99)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.os.Looper.loop(Looper.java:123)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:3687)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:507)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
23:15:15.839 24746 ERROR RedPheasant.LoggerApp AndroidRuntime at dalvik.system.NativeStart.main(Native Method)
23:15:15.849 212 ERROR #212 Dumpstate > /data/log/dumpstate_app_error
これまでのところ助けてくれたThx...それでも同じエラーが発生します。
アップデート:
私はこれが今の私の主な問題だと思います:
java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
これは、ビューをサポートしていないアダプタと関係があると思います。私は少し混乱しています:plol。何か案は。
最終編集- すべてのヘルプマンのための解決されたThx。その最終的に機能し、それは素晴らしく見えます。
膨張を行うときに問題を引き起こした、ImageViewにドローアブルを割り当てる方法の主な問題。それを指摘してくれたThxSam。もう1つの大きな問題は、ルートにコピーしないように、falseパラメーターをinflateメソッドに追加する必要があることでした。これを指摘してくれたThxAngelo。