Meine App hat eine ListView
und jede Zeile enthält eine TextView
einen Timer und einen Video-Player läuft (ExoMediaPlayer) in jeder ZeilenotifyDataSetChanged Android Listview und Videoview
ich jede Zeile aktualisieren, indem listAdapter.notifyDataSetChanged()
den Timer TextView
jede Sekunde zu aktualisieren. Es funktioniert gut, wie im folgenden Code gezeigt.
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());
}
}
}
}
}
Adapter
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;
}
Problem
Der obige Code funktioniert gut und der Timer TextView
aktualisiert die jedes zweite Mal. Aber das Problem, mit dem ich konfrontiert bin, ist der VideoPlayer wird jede Sekunde neu geladen, das Video nicht wegen HListAdapter.notifyDataSetChanged();
Wiedergabe, wenn ich die notifyDataSetChanged()
Videospiele auf der ListView entfernt, aber der Timer TextView
wird nicht aktualisiert.
Jede Möglichkeit zum Aktualisieren/Aktualisieren des Timers TextView
nur jede Sekunde. Jede Logik oder Methode, um das Problem zu lösen und das Videospiel zu machen und auch den Timer jede Sekunde aktualisiert werden?
Warum aktualisieren Sie den Text selbst? 'HListAdapter' sollte darauf achten. Ich denke, Sie sollten zuerst ein wenig mehr über ListView-Adapter lesen –
Ich habe einen Timer auf der Textansicht läuft. jede Sekunde aktualisiere ich die verbleibende Zeit in der Textansicht. – Naz141
können Sie auch Ihren Adapter Code teilen –