2011-07-15 8 views
0

私は毎秒新しいデータを取得するアンドロイドのリストビューを持っています。今度はこのリストをスクロールしますが、新しいデータが到着するたびに、このリストの最初の要素に移動します。新しいデータが到着したときにビューが最初の要素に移動しないように振る舞いを変更することは可能ですか?リストビューのスクロールの振る舞いを変更する

if(arg1.getStringExtra("DATA")!=null){ 
       text = arg1.getStringExtra("DATA").split("\n"); 
       //Erstellt aus den Daten des Traceservices eine Liste bestehend aus Ergebnissen 
       //Result: <(technName,(min,max,invald,color,numeric),aktuellerWert> 
       List<Results> results = new ArrayList<Results>(); 
       if(text.length>0){ 
        for(String x:text){ 
         Results r = new Results(); 
         String []res =x.split("&&&"); 
         Values v = dataDictionary.get(res[0]); 
         r.name=res[0]; 
         r.setV(v); 
         if(res.length>1){ 
          r.setCurrentValues(res[1]); 
         } 
         results.add(r); 
        } 
        ResultAdapter adapter = new ResultAdapter(getApplicationContext(), results); 
        lv.setAdapter(adapter); 

       } 
      } 

ResultAdapterは次のようになります:

public class ResultAdapter extends BaseAdapter { 

private Context context; 
private List<Results> resultList; 

public ResultAdapter(Context context, List<Results> resultList) { 
    this.context = context; 
    this.resultList = resultList; 
} 

public int getCount() { 
    return resultList.size(); 
} 

public Object getItem(int position) { 
    return resultList.get(position); 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    Results r = resultList.get(position); 
    return new ResultAdapterView(this.context, r); 
} 

}

、あなたがそれを必要とする場合はわからないが、

私は新しいデータを取得するたびに、私は次の操作を行いますResultAdapterViewは次のように実装されました:

class ResultAdapterView extends LinearLayout { 

public ResultAdapterView(Context context, Results r) { 
    super(context); 
    this.setOrientation(HORIZONTAL); 
    LinearLayout.LayoutParams resParams; 
    TextView resName = new TextView(context); 
    resParams = new LinearLayout.LayoutParams(170, 25); 
    resParams.setMargins(1, 1, 1, 1); 
    resName.setPadding(0, 3, 0, 0); 
    resName.setText(r.v.getFriendlyName()); 
    resName.setTextColor(Color.WHITE); 
    addView(resName, resParams); 

    if(r.v!=null){ 
     if (!r.v.isNumeric()) { 

      TextView currVal = new TextView(context); 
      currVal.setText(r.currentValue); 
      currVal.setTextColor(Color.WHITE); 
      addView(currVal, resParams); 

     } else { 
      ResultView rv = new ResultView(context, r); 
      addView(rv, resParams); 
     } 
    } 
} 

}

ご協力いただきありがとうございます。

挨拶

クリスティン

+0

アダプターにデータを追加するコードを示してください。 –

+0

新しいデータをアダプタに挿入するコードを投稿できますか?それを挿入するか、アダプタ全体をリフレッシュするだけですか? –

+0

これはコードです: –

答えて

0

リストに新しいデータが到着したとき、あなたは ".setAdapter(...)" を呼び出すために先頭にジャンプします。何をする必要があなたのようなアダプタに延びている。

public class ResultAdapter extends BaseAdapter { 

private Context context; 
private List<Results> resultList; 

public ResultAdapter(Context context, List<Results> resultList) { 
    this.context = context; 
    this.resultList = resultList; 
} 

public int getCount() { 
    return resultList.size(); 
} 

public Object getItem(int position) { 
    return resultList.get(position); 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    Results r = resultList.get(position); 
    return new ResultAdapterView(this.context, r); 
} 

public void setNewData(List<Results> newResults){ 
..Add the new data to the current ones or switch, whatever ... 
notifyDatasetChanged(); 
} 
} 

新しいデータが到着するたびに、だけではなく、まったく新しいアダプタを作成し、リストでそれを設定するの、あなたのアダプタの.setNewData()を呼び出し。 notifyDatasetChanged()の呼び出しに注意してください。これらの場合は、notifyDatasetChanged()を呼び出す必要があります。

+0

notifyDataSetChangedは問題を解決しました。ありがとう –