2012-03-12 2 views
0

내가 만든 다음 어댑터 : ...의 getView 메서드를 호출 Android ArrayAdapter가 반환되지 않습니까?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <TextView android:text="TextView" 
    android:id="@+id/textviewtipid" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    > 
    </TextView> 
    <TextView android:text="TextView" 
    android:id="@+id/textviewtiprepresentation" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    </TextView> 
    <TextView android:text="TextView" 
    android:id="@+id/textviewtipresult" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    </TextView> 
    <TextView android:text="TextView" 
    android:id="@+id/textviewtipplayed" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    </TextView> 

</LinearLayout> 

... 모든 textviews 자신의 값을 변경

마지막 변경 후 (아무리 :

package org.virtualbet.gui.util; 

import java.util.List; 


import org.virtualbet.R; 
import org.virtualbet.model.Tip; 


import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class TipListAdapter extends ArrayAdapter<Tip> { 
    private final Context context; 
    private List<Tip> values; 

    public TipListAdapter(Context context, int textViewResourceId, List<Tip> objects) { 
     super(context, textViewResourceId, objects); 
     //super(context, R.layout.rowlayout, values); 
     this.context = context; 
     this.values = objects; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     try { 
      View v = convertView; 
      if (v == null) { 
       LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = inflater.inflate(R.layout.row_tip, null); 
      } 
      Tip tip = values.get(position); 
      if (tip!=null) { 
       ((TextView)v.findViewById(R.id.textviewtipid)).setText((CharSequence)tip.getTipNumber()); 
       ((TextView)v.findViewById(R.id.textviewtiprepresentation)).setText((CharSequence)tip.getTipRepresentation()); 
       ((TextView)v.findViewById(R.id.textviewtipresult)).setText((CharSequence)tip.getDetails()); 
       ((TextView)v.findViewById(R.id.textviewtipid)).setText((CharSequence)tip.getTipOptions()); 
       return v; 
      } 
      return null; 
     } catch (Throwable t) { 
      Log.e("A", t.toString()); 
      return null; 
     } 
    } 


} 

의 ListView XML은 다음과 같습니다 어느 쪽 이냐?) 프로그램은 캐치 부분에 들어간다 ???

왜? 누구든지 이런 문제가 있었나요?

package org.virtualbet.gui; 

import java.util.ArrayList; 
import java.util.List; 

import org.virtualbet.R; 
import org.virtualbet.bll.TipBLL; 
import org.virtualbet.gui.util.TipListAdapter; 
import org.virtualbet.model.Ticket; 
import org.virtualbet.model.Tip; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 

public class FollowTicket extends Activity { 

    private static final String TAG = "FollowTicket"; 

    private TipBLL bll; 
    private TipListAdapter tipListAdapter; 
    private ListView lv; 
    private List<Tip> tips; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.follow_ticket); 

     bll = new TipBLL(); 
     tips = new ArrayList<Tip>(); 
     tipListAdapter = new TipListAdapter(this.getApplicationContext(), R.layout.row_tip, tips); 
     lv = ((ListView)findViewById(R.id.listViewTips)); 
     lv.setAdapter(tipListAdapter); 
     ((Button)findViewById(R.id.buttonSearchForTicket)).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       searchTicket(((EditText)findViewById(R.id.editTextSerialNumber)).getText().toString()); 
      } 
     }); 
    } 

    private void searchTicket (String serialNumber) { 
     Log.i(TAG, "Searching ticket " + serialNumber); 
     Ticket ticket = bll.getTicket(serialNumber); 
     if (ticket != null){ 
      Log.i(TAG, "Found it!"); 
      tips.clear(); 
      for (Tip tip : ticket.getTips()) { 
       Log.i(TAG, "Adding tip " + tip.getTipNumber()); 
       tips.add(tip); 
      } 
      tipListAdapter.notifyDataSetChanged(); 
     } else { 
      Log.i(TAG, "Didn't find it!"); 
     } 
    } 

} 
+0

logcat에 "팁 추가"줄이 있습니까? –

+0

예 .. 디버깅하려고 할 때 notifyDataSetChanged() ... :/ –

+0

그리고 가장 흥미로운 Throwable t는 비어 있습니다. 예외를 잡으려고했지만 예외도있었습니다. ... –

답변

1

가 IT를 고정 이유가 될 수있다! 정말 어리석은 실수. 내 레이아웃에서 나는 목록을 잡고 된 위치하는 일부 요소

............. 내가

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" <-------------ERROR!!!!!! 
    android:background="#880000" 
    android:orientation="horizontal" > 

했다 채우는

</LinearLayout> 
<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
</ListView> 

경우 오류! 이 레이아웃은 범위 밖으로 ListView를 푸시하고 ListView가 있다는 것을 모르기 때문에 wrap_content이어야합니다 (런타임시 컴파일러 코딩이 불평하지는 않습니다) ...... 정말 바보 같네요!

어쨌든 도와 주셔서 감사합니다 ....

0

는 다시이 부분을 살펴 갖고 싶어 할 수있다 : I 프로젝트 (일식) 문제 ....

아, 네, 나는 모델을 변경하고 장소이다 그건 그 곳 읽었습니다 코드에서 :

 if (tip!=null) { 
      ((TextView)v.findViewById(R.id.textviewtipid)).setText((CharSequence)tip.getTipNumber()); 
      ((TextView)v.findViewById(R.id.textviewtiprepresentation)).setText((CharSequence)tip.getTipRepresentation()); 
      ((TextView)v.findViewById(R.id.textviewtipresult)).setText((CharSequence)tip.getDetails()); 
      ((TextView)v.findViewById(R.id.textviewtipid)).setText((CharSequence)tip.getTipOptions()); 
      return v; 
     } 

난 당신이 R.id.textviewtipid 두 번하려고 생각합니다.

 if (tip!=null) { 
      ((TextView)v.findViewById(R.id.textviewtipid)).setText((CharSequence)tip.getTipNumber()); 
      ((TextView)v.findViewById(R.id.textviewtiprepresentation)).setText((CharSequence)tip.getTipRepresentation()); 
      ((TextView)v.findViewById(R.id.textviewtipresult)).setText((CharSequence)tip.getDetails()); 
      ((TextView)v.findViewById(R.id.textviewipplayed)).setText((CharSequence)tip.getTipOptions()); 
      return v; 
     } 

+0

알림을 보내 주셔서 감사합니다.하지만 도움이되지 않았습니다./... 내가 뭘 잘못하고 있는지 잘 모르겠다. ( –

관련 문제