だから私は以前私が抱えていたこの問題を抱えており、当然私はここで助けを求めました。Luksprogの答えは素晴らしかったです。なぜなら、ListViewとGridViewがリサイクルビューで自分自身をどのように最適化するのか私にはわからなかったからです。したがって、彼の助言により、GridViewにビューを追加する方法を変更することができました。問題は今私は意味をなさない何かを持っていることです。これは私のgetView
ものBaseAdapter
です:
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.day_view_item, parent, false);
}
Log.d("DayViewActivity", "Position is: "+position);
((TextView)convertView.findViewById(R.id.day_hour_side)).setText(array[position]);
LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.day_event_layout);
//layout.addView(new EventFrame(parent.getContext()));
TextView create = new TextView(DayViewActivity.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 62, getResources().getDisplayMetrics()), 1.0f);
params.topMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
params.bottomMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
create.setLayoutParams(params);
create.setBackgroundColor(Color.BLUE);
create.setText("Test");
//the following is my original LinearLayout.LayoutParams for correctly setting the TextView Height
//new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()), 1.0f)
if(position == 0) {
Log.d("DayViewActivity", "This should only be running when position is 0. The position is: "+position);
layout.addView(create);
}
return convertView;
}
}
問題は、私がスクロールすると、これが発生し、位置0ではない...位置6と位置8のように見え、さらに2を位置8に配置します。なぜこれが起こっているのか理解できません。私がこの質問をしている主な理由の1つは、おそらくListViewとGridViewのリサイクルビュー、またはこの記事でのScrapViewメカニズムのことを知らない人を助けるためです。
後で編集
リストビューの仕組みを理解するために基本的に必要なのは、Google IOトークへのリンクの追加です。リンクはコメントの上で死んでいた。したがって、user3427079はそのリンクを更新するのに十分なほど優れていました。ここでは、それは容易なアクセスのためです。
0
)を元に戻すためのコードを常に用意する必要があるということです。
ListView
が、新しい行を表示する必要があるときに(下にスクロールし続ける/上にスクロールするなど)後で使用できることを意味します。問題は、消えたばかりのビューと将来必要な位置で使用されるビューがTextView
すでに追加されていることです。これが問題です。それを解決するにはgetView
、getView
メソッドが以外の位置で呼び出された場合、メソッドでそれを削除する必要があります0
。