我在listview中使用搜索栏时遇到问题,Seekbar的搜索开始在点击按钮时获得更新但是当我们在列表中有多个搜索栏时会出现问题 假设我点击第二个或第三个搜索栏,我的列表中有三个搜索栏,首先(在列表中)搜索栏的搜索始终会更新。
请帮我解决这个问题。
以下是我的代码:
xml中的Listview:
<ListView
android:id="@+id/lstMessages"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:transcriptMode="alwaysScroll"
android:layout_above="@+id/relSendMessage"
android:layout_below="@+id/relRecipient"
android:background="@drawable/bg_shadow"
android:padding="0dip"
android:divider="@null"
android:dividerHeight="0dp" android:stackFromBottom="true" tools:listitem="@layout/message_left"/
Adapter Class Code :
public class ChatAdapter extends BaseAdapter implements OnCompletionListener{
Context context;
TextView txtmsg;
ImageView imgSender ,playaudio;
TextView txtSender;
TextView txtDate;
VideoView videosender;
SeekBar seekbar;
MediaPlayer mp;
private boolean bVideoIsBeingTouched = false;
private Handler mHandler = new Handler();
ArrayList<HashMap<String, String>> data;
public ChatAdapter(Context context,
ArrayList<HashMap<String, String>> arraylist) {
// TODO Auto-generated constructor stub
this.context = context;
data = arraylist;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public View getView( int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
HashMap<String, String> resultp = new HashMap<String, String>();
resultp = data.get(position);
if (convertView == null) {
int res = 0;
if(resultp.get(Tab2.CHAT_MSG).equals("/AUDIO/")&&resultp.get(Tab2.CHAT_TYPE).equals("outgoing"))
{
final String path=resultp.get(Tab2.PATH);
res = R.layout.audioleft;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(res, parent, false);
txtSender = (TextView) convertView.findViewById(R.id.txtSender);
playaudio = (ImageView) convertView.findViewById(R.id.imageView1);
seekbar = (SeekBar) convertView.findViewById(R.id.songProgressBar);
playaudio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
getActivity().setVolumeControlStream(android.media.AudioManager.STREAM_MUSIC);
mp = new MediaPlayer();
mp.setOnCompletionListener(ChatAdapter.this);
try {
playaudio.setBackgroundResource(R.drawable.img_btn_pause);
mp.setDataSource(path);
mp.prepare();
mp.start();
seekbar.setProgress(0);
seekbar.setMax(100);
// Updating progress bar
updateProgressBar();
} catch (Exception e) {
e.printStackTrace();
}
}
});
txtDate = (TextView) convertView.findViewById(R.id.txtDate);
}
}
else
{
}
return convertView;
}
}
public void updateProgressBar() {
mHandler.postDelayed(mUpdateTimeTask, 100);
}
/**
* Background Runnable thread
* */
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
long totalDuration = mp.getDuration();
long currentDuration = mp.getCurrentPosition();
// Displaying Total Duration time
// Displaying time completed playing
);
// Updating progress bar
int progress = (int)(getProgressPercentage(currentDuration, totalDuration));
//Log.d("Progress", ""+progress);
seekbar.setProgress(progress);
// Running this thread after 100 milliseconds
mHandler.postDelayed(this, 100);
}
};
audioleft.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_marginRight="10dp">
<TextView
android:id="@+id/txtSender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="Sender Ipsum"
android:textSize="16sp"
android:singleLine="true"
android:layout_alignParentLeft="true"
android:paddingLeft="10dp"
android:paddingBottom="6dp"
android:textColor="@android:color/black" android:textStyle="bold"/>
<TextView
android:id="@+id/txtDate"
android:layout_alignParentRight="true"
android:textColor="@color/sinch_purple"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="2dp"
android:paddingBottom="6dp"
android:textSize="12sp"
android:text="14:54"
android:layout_alignBottom="@+id/txtSender"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txtSender"
android:layout_alignParentLeft="true"
android:padding="12dp"
>
<SeekBar
android:id="@+id/songProgressBar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_marginLeft="20dp"
android:layout_marginBottom="20dp"
android:thumb="@drawable/sthumb"
android:progressDrawable="@drawable/seekbar_progress"
/>
<!-- android:thumb="@drawable/seek_handler" -->
<ImageView
android:id="@+id/imageView1"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignBottom="@+id/songProgressBar"
android:layout_alignParentLeft="true"
android:layout_marginLeft="17dp"
android:background="@drawable/img_btn_play" />
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
答案 0 :(得分:0)
每次在getView()
中充气时,都必须创建新的侦听器并将其影响到搜索栏seekbar.setOnXXXListener(new XXXListener(){
public void onSeekXXX(){
//do your thing about this seekbar...
}
)};
编辑:
你真的应该使用ViewHolder模式来调和:External link
答案 1 :(得分:0)
实际上问题出在我的计时器上,它在完成后没有停止我在每次搜索栏完成后停止计时器并且问题得到解决。