2017-05-03 14 views
1

私はランナーの実行履歴を表示するために、15秒の時間を持つすべての実行が単一のリストビューになるようなカテゴリに基づいています20秒の時間を持つすべての実行は、別のリストビューの下に来るでしょう。各リストビューの上部には、時間見出しとその下のランの総数を含むframelayoutがあります。したがって、15秒間に2回走行した場合、これらの2つの見出しを持つフレームレートがあり、その下に2つのラン項目を含むリストビューが表示されます。 データベースから実行履歴をフェッチしているので、私はframelayoutsとlistviewsをコーディングによって動的に作成しています。1つのアクティビティで同じカスタムアダプタの複数のインスタンスを持つ複数のListView

私が直面している問題は、同じアクティビティの中で複数のリストビュー(コードまたはXMLを通じて)を作成し、これらのリストビューに対して同じアダプタクラス(しかしそれより多くのインスタンス)を使用すると、すべてのリストビューには、最後のアダプタオブジェクトに与えられたarraylistが設定されます。いくつかのより明確にするため、次のコードを考えてみてください:

for(int i=0; i<listOfLists.size(); i++) { 
    linearLayout.addView(frameLayoutList.get(i)); 
    CustomAdapter2 customAdapter2 = new 
    CustomAdapter2(getBaseContext(), listOfLists.get(i)); 
    ListView listView = new ListView(getApplicationContext()); 
    listView.setAdapter(customAdapter2); 
    linearLayout.addView(listView); 
} 

私は別のクラス名(customAdapter3)とcustomAdapter2とcustomAdapter3と人口2つのリストビューでのアダプターのための、まったく同じ新しいクラスを作成しようと、彼らはリストビューを移入し、正しいデータで 私は前もっていくつのリストビューを使用するか分からないので、リストビューすべてに対して異なるアダプタクラスを作成することはできません。 リストビューごとに異なるインスタンスを持つすべてのリストビューに同じアダプタクラスを使用することはどういうことですか?ここで

は、アダプタクラスのコード

public class CustomAdapter2 extends BaseAdapter { 

private final LayoutInflater mInflater; 
Context context; 
public static List<Run> list = null; 

public CustomAdapter2(Context context, List<Run> l) { 

    this.context = context; 
    this.list = l; 
    mInflater = LayoutInflater.from(context); 
} 

public void add(Run run) { 
    list.add(run); 
    notifyDataSetChanged(); 
} 



public double getScreenSize() { 
    DisplayMetrics dm = new DisplayMetrics(); 
    WindowManager windowManager = (WindowManager) context 
      .getSystemService(Context.WINDOW_SERVICE); 
    windowManager.getDefaultDisplay().getMetrics(dm); 
    int width = dm.widthPixels; 
    int height = dm.heightPixels; 
    int dens = dm.densityDpi; 
    double wi = (double) width/(double) dens; 
    double hi = (double) height/(double) dens; 
    double x = Math.pow(wi, 2); 
    double y = Math.pow(hi, 2); 
    double screenInches = Math.sqrt(x + y); 

    return screenInches; 
} 

@Override 
public int getCount() { 
    return list.size(); 
} 

@Override 
public Object getItem(int position) { 
    return list.get(position); 
} 


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


@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    final ViewHolder holder; 
    if (convertView == null) { 
     if(getScreenSize() <= 4) 
      convertView = mInflater.inflate(R.layout.list_view_item_small, parent, false); 
     else 
      convertView = mInflater.inflate(R.layout.list_view_item, parent, false); 
     holder = new ViewHolder(); 
     holder.trophyTextView = (TextView) convertView.findViewById(R.id.trophyTextView); 
     holder.normalTextView = (TextView) convertView.findViewById(R.id.normalTextView); 
     holder.raceDuration = (TextView) convertView.findViewById(R.id.raceTime1TextView); 
     holder.raceTimeUnit = (TextView) convertView.findViewById(R.id.raceTime2TextView); 
     holder.raceDate = (TextView) convertView.findViewById(R.id.dateTextView); 
     holder.raceTime = (TextView) convertView.findViewById(R.id.timeTextView); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    if(position == 0) { 
     holder.trophyTextView.setVisibility(View.VISIBLE); 
     holder.normalTextView.setVisibility(View.INVISIBLE); 
    } 
    else { 
     holder.trophyTextView.setVisibility(View.INVISIBLE); 
     holder.normalTextView.setVisibility(View.VISIBLE); 
     holder.normalTextView.setText("" + (position + 1)); 
    } 

    holder.raceDuration.setText(list.get(position).getTimeDistance()); 
    holder.raceTimeUnit.setText(list.get(position).getUnit()); 
    holder.raceDate.setText(list.get(position).getDate()); 
    holder.raceTime.setText(list.get(position).getTime()); 

    return convertView; 
} 


private class ViewHolder { 
    TextView trophyTextView; 
    TextView normalTextView; 
    TextView raceDuration; 
    TextView raceTimeUnit; 
    TextView raceDate; 
    TextView raceTime; 
} 

すべてのヘルプは高く評価されています。

おかげ

答えて

0

は、アダプタ内のリストには、静的なので、クラスのすべてのインスタンスで同じです。

は、私はまた、あなたがそれを作る民間の代わりに、パブリック(あなたはクラスの外からアクセスする必要がある場合はゲッターを作成)するために助言する public List<Run> list = null;

public static List<Run> list = null;を交換してください。

+0

ありがとう、私はナッツに行っていた。私は静的な部分を逃したとは信じられません。もう一度男に感謝します。 –

関連する問題