私のアプリがListView
あり、各行はTextView
タイマーTextView
秒ごとに更新するために、私はlistAdapter.notifyDataSetChanged()
により、各行をリフレッシュタイマと、各行notifyDataSetChanged AndroidのListViewコントロールとVideoView
でビデオプレーヤー(ExoMediaPlayer)を実行しているが含まれています。下のコードに示すように正常に動作します。
Thread t = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(1000);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
updateTextView();
}
});
}
} catch (InterruptedException e) {
}
}
};
t.start();
private void updateTextView() {
if (listView != null) {
for (int i = 0; i <= listView.getListChildCount(); i++) {
View v = listView.getListChildAt(i);
if (v != null) {
for(int x=firstVisibleRow;i<=lastVisibleRow;i++)
{
HomeListItem data;
data = listMockData.get(i);
HListAdapter.notifyDataSetChanged();
TextView t = (TextView) v.findViewById(R.id.tvTimer);
t.setText(data.getElapsedTime());
}
}
}
}
}
アダプタ
public HListAdapter(Context context, ArrayList<HomeListItem> listData) {
c = context;
layoutInflater = LayoutInflater.from(context);
this.listData = listData;
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return listData.indexOf(getItem(position));
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
newsItem = listData.get(position);
if (convertView == null) {
holder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.location_list_row, null);
holder.timer= (TextView) convertView.findViewById(R.id.timer);
holder.videoPlayer = (EMVideoView) convertView.findViewById(R.id.videoPlayer);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
newsItem = listData.get(position);
holder.timer.setText(newsItem.getElapsedTime());
String videolink = "http://www.someurl.com/";
holder.videoPlayer.setVideoURI(Uri.parse(videolink));
holder.videoPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
holder.videoPlayer.start();
}
});
return convertView;
}
static class ViewHolder {
TextView timer;
EMVideoView videoPlayer;
}
問題
上記のコードは良い作品とタイマーTextView
は時間毎秒更新されます。 しかし、私が直面している問題は、notifyDataSetChanged()
のビデオをリストビューで再生したのに、TextView
が更新されないと、VideoPlayerが毎秒再読み込みされているため、ビデオが再生されませんでした。HListAdapter.notifyDataSetChanged();
TextView
タイマーを毎秒更新/更新する可能性があります。 問題を解決してビデオを再生し、毎秒タイマーを更新するロジックや方法はありますか?
notifyDataSetChanged()
の必要なしで行きますか? 'HListAdapter'はそれを処理する必要があります。私はあなたが最初にリストビューアのアダプタについての詳細を読むべきだと思う –私は、テキストビュー上で実行しているタイマーがあります。毎秒私はテキストビューの残りの時間を更新しています。 – Naz141
あなたもアダプタコードを共有することができます –