2016-03-31 7 views
-2

リストビューに問題があり、リストビューにデータを取得できません。 ArrayListのからのデータは、データから成功したロードされたと私はArrayAdapterに入れたときにアプリが常にArrayAdapterがTextViewの ここに私のコードArrayListからデータを取得<Object>をリストビューに設定する

EventList.java

public class EventList extends Activity { 
    ListView listView; 
    DBHelper db; 
    List<String> event_name; 
    private TextView e_name,e_location,e_date,e_time,e_or; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_event_list); 
     db = new DBHelper(this); 
     listView = (ListView) findViewById(R.id.eventlist); 
     db.open(); 
     ArrayList<Event> elist= db.getEventlist(); 
     db.close(); 
     e_name=(TextView) findViewById(R.id.e_name); 
     e_date=(TextView) findViewById(R.id.e_date); 
     e_location =(TextView) findViewById(R.id.e_location); 
     e_time =(TextView) findViewById(R.id.e_time); 
     e_or =(TextView) findViewById(R.id.e_or); 
     // for(int i=0;i<elist.size();i++) 
    // { 
    //  e_name.setText(elist.get(i).getEventName()); 
     //  e_date.setText(elist.get(i).getDate()); 
    //  e_location.setText(elist.get(i).getLocation()); 
     //  e_time.setText(elist.get(i).getTime()); 
     // e_or.setText(elist.get(i).getOrganizer()); 

     // } 
     ArrayAdapter<Event> arrayAdapter = new ArrayAdapter<Event>(
       this, 
       R.layout.each_event,elist); 
     listView.setAdapter(arrayAdapter); 


    } 

} 

activity_event_listするリソースIDを必要と言います。 XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    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="com.greenwich.thaotb.eventmanagement.EventList"> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 

    /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Event List" 
     android:id="@+id/textView2" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Event" 
     android:id="@+id/textView3" 
     android:layout_marginTop="26dp" 
     android:layout_below="@+id/textView2" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:text="Event" 
     android:ems="10" 
     android:id="@+id/event_name" 
     android:layout_alignBottom="@+id/textView3" 
     android:layout_toRightOf="@+id/textView3" 
     android:layout_toEndOf="@+id/textView3" 
     android:layout_marginLeft="33dp" 
     android:layout_marginStart="33dp" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Search" 
     android:id="@+id/bnt_search" 
     android:layout_below="@+id/event_name" 
     android:layout_alignRight="@+id/event_name" 
     android:layout_alignEnd="@+id/event_name" /> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/eventlist" 
     android:layout_below="@+id/bnt_search" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:choiceMode="singleChoice" /> 




</RelativeLayout> 

each_event.xml

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


    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/e_name" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/e_location" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/e_date" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/e_time" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/e_or" /> 
</LinearLayout> 
+0

アクティビティ内に 'findViewById(R.id.e_name);があるのはなぜですか?それはnullを返します。独自のAdapterクラスを実装する必要があります。 –

+0

私はArrayAdapterの使用を避けようとしています。とにかくおかげで、あまりにもそのコードをコメントします –

+0

しかし、*あなたは* ArrayAdapterを使用する必要があります。そしてあなたは既にArrayAdapterを使用しているので、なぜそれを避けようとしているのか混乱しています。 –

答えて

0

あなたが使用しているconstructor for ArrayAdapterのドキュメントを見てください。それは、リソースIDがTextViewを持つレイアウトでなければならないと言います。この場合、レイアウトには1つのTextViewのみが含まれている必要があります。別のケースがある場合は、別のコンストラクタを使用します。

ArrayAdapterは配列のオブジェクトのtoString()値を取得し、渡されたレイアウトによって識別されるTextViewに配置してListViewにデータを設定します。あなたが任意の複雑なデータオブジェクトを表示するためのArrayAdapterコンストラクタを使用することはできません

+0

OPが2つのパラメータコンストラクタを使用しているので、TextViewを持つレイアウトファイルのリソースIDでなければならないと言います。 –

+0

ええ、それは特別なケースだと思います。更新しました。 –

0

2つの問題

  1. 。それはちょうどtoStringすべてのオブジェクトです。
  2. findViewById(R.id.e_name)を呼び出す(その他)activity_event_list.xmlファイルからではありませんnull@+id/e_nameための活動の中からは戻ります。

これを解決するには、イベントオブジェクトにimplement a custom ArrayAdapterが必要です。その後の活動では、あなたが私はあなたのコードとの事を読んだ

ArrayList<Event> elist= db.getEventlist(); 
EventAdapter adapter = new EventAdapter(this, elist); 
listView.setAdapter(adapter); 
+0

ありがとう、ありがとうございます:D –

+0

回答の横にあるチェックマークを使用して感謝の意を表します。 –

0

行うことができますので、

public class EventAdapter extends ArrayAdapter<Event> { 
    public EventAdapter(Context context, ArrayList<Event> events) { 
     super(context, 0, events); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Get the data item for this position 
     Event event = getItem(position);  
     // Check if an existing view is being reused, otherwise inflate the view 
     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.each_event, parent, false); 
     } 

     TextView eName = (TextView) convertView.findViewById(R.id.e_name); 
     // get other views ... 

     eName.setText(event.getEventName()); 
     // set other views... 

     return convertView; 
    } 
} 

よう

何かがあなたが本当にどのようにリストビューととアダプタを理解していないということです共に働く。あなたが望むものを達成するための エレガントな方法はにある:

イベントを表してカスタムクラスを作成し、それがこのようなものでなければなりません:

class Event{ 
    private String mName; 
    private String mLocation; 
    private String mDate; 
//you get the idea ... 
    public Event (String name, String location, String date){ 
     mName = name; 
     mLocation = location; 
     mDate = date; 
    } 
//some getters 
    public String getName(){ 
     return mName; 
    } 
    public String getLocation(){ 
     return mLocation; 
    } 
    public String getDate(){ 
     return mDate; 
    } 
//you can add other logic here depending on what you want your event to do 

}

あなたのイベントのコレクションを作成し、 List<Event>となります。

カスタムEventAdapterを作成するには、BaseAdapterクラスを拡張することをお勧めします。

Here is私が上で述べたことをどのように実装するかを示す大きなステップバイステップチュートリアル。

あなたがしたいことを正確に達成するきれいでエレガントなコードになります。

+0

ちょうど好奇心、なぜ 'BaseAdapter'ですか?とにかく 'List'を使うつもりなら、' ArrayAdapter'が優先されます。 –

+0

私はクラスのイベントがあり、私はそれを投稿するのを忘れました。とにかくありがとう –

+0

あなたはそれを忘れましたか?あなたはあなたのコードでそれを使用していません! – AnixPasBesoin

関連する問題