Android 列表视图项';从屏幕上滚动视图后,s视图将返回到原始状态
我在listview项目中有一个按钮,当它被单击时,水平进度条开始加载,当加载完成时,两个按钮应该出现在listview项目中。当progressbar下载时,如果我从屏幕上滚动该项目,然后将其向后滚动,progressbar将消失,并出现两个按钮。下载过程运行良好。但是我想在下载的时候显示进度条? 这是我的适配器。请帮忙。提前谢谢Android 列表视图项';从屏幕上滚动视图后,s视图将返回到原始状态,android,listview,android-asynctask,listviewitem,android-progressbar,Android,Listview,Android Asynctask,Listviewitem,Android Progressbar,我在listview项目中有一个按钮,当它被单击时,水平进度条开始加载,当加载完成时,两个按钮应该出现在listview项目中。当progressbar下载时,如果我从屏幕上滚动该项目,然后将其向后滚动,progressbar将消失,并出现两个按钮。下载过程运行良好。但是我想在下载的时候显示进度条? 这是我的适配器。请帮忙。提前谢谢 @Override public View getView(final int position, View convertView, ViewGroup pare
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ArrayList<String> array=JournalArray.get(position);
LayoutInflater inflator = ((Activity) activity).getLayoutInflater();
final Hashtable<Integer, Integer> hash = new Hashtable<Integer, Integer>();
final Button imgAR;
final Button imgPDF;
final Button imgDown;
final Button btnDel;
final TextProgressBar progress;
//ConnectionDetector cd=new ConnectionDetector(activity);
final Database db=new Database(activity);
//final ImageView imgViewFlag;
//final TextView txtViewTitle,txtProgress;
if(convertView==null)
{
convertView = inflator.inflate(R.layout.familylist_item, null);
}
progress=(TextProgressBar)convertView.findViewById(R.id.downprogress);
progress.setTextColor(Color.BLACK);
//progress.setTag(tag)
//progress.setVisibility(View.GONE);
TextView txtViewTitle = (TextView) convertView.findViewById(R.id.text);
//view.txtProgress=(TextView)convertView.findViewById(R.id.textProgress);
ImageView imgViewFlag = (ImageView) convertView.findViewById(R.id.imageView1);
imgAR=(Button)convertView.findViewById(R.id.imageAR);
//view.imgAR.setTag(view);
imgDown=(Button)convertView.findViewById(R.id.imageDown);
//view.imgDown.setTag(view);
imgPDF=(Button)convertView.findViewById(R.id.imagePDF);
//view.imgPDF.setTag(view);
//view.progress=(ProgressBar)convertView.findViewById(R.id.downprogress);
btnDel=(Button)convertView.findViewById(R.id.btnDel);
//view.btnDel.setTag(view);
//convertView.setTag(view);
if(DeleteBin){
if(XMLParser.CheckFileInSD(array.get(5))){
btnDel.setVisibility(View.VISIBLE);
imgAR.setVisibility(View.GONE);
imgDown.setVisibility(View.GONE);
imgPDF.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
}
else{
imgDown.setVisibility(View.GONE);
imgAR.setVisibility(View.GONE);
btnDel.setVisibility(View.GONE);
imgPDF.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
}
}
else{
btnDel.setVisibility(View.GONE);
if(!XMLParser.CheckFileInSD(array.get(5))){
imgAR.setVisibility(View.GONE);
imgPDF.setVisibility(View.GONE);
imgDown.setVisibility(View.VISIBLE);
progress.setVisibility(View.GONE);
}
else{
imgAR.setVisibility(View.VISIBLE);
imgPDF.setVisibility(View.VISIBLE);
imgDown.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
}
}
txtViewTitle.setText(array.get(1));
channelid=array.get(4);
RelativeLayout.LayoutParams paramrel = new RelativeLayout.LayoutParams(width/5, height/5);
paramrel.leftMargin = width/10;
imgViewFlag.setLayoutParams(paramrel);
imgViewFlag.setImageDrawable(Drawable.createFromPath(new File(array.get(3)).getAbsolutePath()));
btnDel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pos=position;
Deletefiles(pos);
Toast.makeText(activity, "Сэтгүүл амжилттай усгтгагдлаа", Toast.LENGTH_SHORT).show();
btnDel.setVisibility(View.GONE);
}
});
imgAR.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
channelid=array.get(4);
Intent intent=new Intent(activity,ARELViewActivity.class);
intent.putExtra("channelid", db.getConfigByChannelID(channelid));
activity.startActivity(intent);
}
});
imgPDF.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SdCardPath")
@Override
public void onClick(View v) {
path=array.get(5);
String PATH=Environment.getExternalStorageDirectory().getAbsolutePath()+ "/sdcard/.FamilyMagazine/";
openBook(PATH+XMLParser.getFileName(path));
}
});
imgDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Database db=new Database(activity);
final ConnectionDetector cd=new ConnectionDetector(activity);
if(downloading<3){
downloading++;
path=array.get(5);
channelid=array.get(4);
pos=position;
progress.setMax(100);
progress.setProgress(0);
progress.setVisibility(View.VISIBLE);
imgDown.setVisibility(View.GONE);
progress.setText("Татаж байна...");
new AsyncTask<View, String, String>() {
private View v;
@Override
protected String doInBackground(View... params) {
v = params[0];
int count;
isLoading=true;
//mprogress=progress;
String result="0";
if(cd.isConnectingToInternet()){
getChannel(channelid);
try {
URL url = new URL(path);
URLConnection conection = url.openConnection();
conection.connect();
// getting file length
lenghtOfFile = conection.getContentLength();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(), 8192);
String PATH="/mnt/sdcard/sdcard/.FamilyMagazine";
File dir=new File(PATH);
boolean test=dir.mkdirs();
OutputStream output = new FileOutputStream("/mnt/sdcard/sdcard/.FamilyMagazine/"+XMLParser.getFileName(path));
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
// After this onProgressUpdate will be called
publishProgress(""+(int)((total*100)/lenghtOfFile));
// writing data to file
output.write(data, 0, count);
hash.put(pos, (int)((total*100)/lenghtOfFile));
}
// flushing output
output.flush();
// closing streams
output.close();
input.close();
} catch (Exception e) {
result=e.toString();
}
}
else
result="Интернетэд холбогдоогүй байна!";
return result;
}
protected void onProgressUpdate(String... progresses) {
// setting progress percentage
progress.setProgress(Integer.parseInt(progresses[0]));
int x=lenghtOfFile/100 * Integer.parseInt(progresses[0])/1048576;
progress.setText(x+"MB / "+lenghtOfFile/1048576+"MB");
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//view.txtProgress.setVisibility(View.GONE);
downloading--;
isLoading=false;
if(result.equals("0")){
imgDown.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
btnDel.setVisibility(View.GONE);
imgAR.setVisibility(View.VISIBLE);
imgPDF.setVisibility(View.VISIBLE);
}
else
{
Toast.makeText(activity, result, Toast.LENGTH_LONG).show();
imgDown.setVisibility(View.VISIBLE);
btnDel.setVisibility(View.GONE);
imgAR.setVisibility(View.GONE);
imgPDF.setVisibility(View.GONE);
}
}
}.execute(v);
}
else
Toast.makeText(activity, "Өөр сэтгүүл татаж байна\n Түр хүлээнэ үү", Toast.LENGTH_LONG).show();
}
});
return convertView;
}
@覆盖
公共视图getView(最终int位置、视图转换视图、视图组父级){
最终ArrayList数组=JournalArray.get(位置);
LayoutFlater充气器=((活动)活动).GetLayoutFlater();
最终哈希表哈希=新哈希表();
最终按钮imgAR;
最终按钮imgPDF;
最终按钮imgDown;
最终按钮btnDel;
最终文本进度条进度;
//ConnectionDetector cd=新的ConnectionDetector(活动);
最终数据库db=新数据库(活动);
//最终图像视图imgViewFlag;
//最终文本视图txtViewTitle,txtProgress;
if(convertView==null)
{
convertView=充气机。充气(R.layout.familylist_项,空);
}
progress=(TextProgressBar)convertView.findViewById(R.id.downprogress);
进度。setTextColor(颜色。黑色);
//progress.setTag(标记)
//progress.setVisibility(View.GONE);
TextView txtViewTitle=(TextView)convertView.findViewById(R.id.text);
//view.txtProgress=(TextView)convertView.findViewById(R.id.textProgress);
ImageView imgViewFlag=(ImageView)convertView.findViewById(R.id.imageView1);
imgAR=(按钮)convertView.findViewById(R.id.imageAR);
//view.imgAR.setTag(视图);
imgDown=(按钮)convertView.findViewById(R.id.imageDown);
//view.imgDown.setTag(视图);
imgPDF=(按钮)convertView.findViewById(R.id.imagePDF);
//view.imgPDF.setTag(视图);
//view.progress=(ProgressBar)convertView.findViewById(R.id.downprogress);
btnDel=(按钮)convertView.findViewById(R.id.btnDel);
//view.btnDel.setTag(视图);
//setTag(视图);
if(DeleteBin){
if(XMLParser.CheckFileInSD(array.get(5))){
btnDel.setVisibility(视图可见);
imgAR.setVisibility(View.GONE);
设置可见性(View.GONE);
imgPDF.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
}
否则{
设置可见性(View.GONE);
imgAR.setVisibility(View.GONE);
btnDel.setVisibility(View.GONE);
imgPDF.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
}
}
否则{
btnDel.setVisibility(View.GONE);
if(!XMLParser.CheckFileInSD(array.get(5))){
imgAR.setVisibility(View.GONE);
imgPDF.setVisibility(View.GONE);
设置可见性(View.VISIBLE);
progress.setVisibility(View.GONE);
}
否则{
imgAR.setVisibility(View.VISIBLE);
imgPDF.setVisibility(View.VISIBLE);
设置可见性(View.GONE);
progress.setVisibility(View.GONE);
}
}
setText(array.get(1));
channelid=array.get(4);
RelativeLayout.LayoutParams paramrel=新的RelativeLayout.LayoutParams(宽度/5,高度/5);
paramrel.leftMargin=宽度/10;
imgViewFlag.setLayoutParams(paramrel);
imgViewFlag.setImageDrawable(Drawable.createFromPath(新文件(array.get(3)).getAbsolutePath());
btnDel.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
pos=位置;
删除文件(pos);
Toast.makeText(活动“Сэзжжжааааааааааааааа;
btnDel.setVisibility(View.GONE);
}
});
imgAR.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
channelid=array.get(4);
意向意向=新意向(活动,ARELViewActivity.class);
intent.putExtra(“channelid”,db.getConfigByChannelID(channelid));
活动。开始触觉(意图);
}
});
imgPDF.setOnClickListener(新视图.OnClickListener(){
@SuppressLint(“SdCardPath”)
@凌驾
公共void onClick(视图v){
path=array.get(5);
字符串路径=Environment.getExternalStorageDirectory().getAbsolutePath()+“/sdcard/.FamilyMagazine/”;
openBook(PATH+XMLParser.getFileName(PATH));
}
});
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
数据库db=新数据库(活动);
最终连接检测器cd=新连接检测器(活动);
如果(下载我遇到了这个问题。发生这种情况是因为Listview重用了视图(行),它不会为所有行创建视图,它只创建一些在屏幕上可见的行,其余行只重用创建的视图
问题的解决方案是维护某个自定义对象中每一行的状态(您可以拥有这些对象的arraylist),然后在getView()方法中,从该对象恢复所有视图的状态。
例如您可以将此对象中progressBar的状态保存为布尔值。一旦有人按下按钮,该对象(对应于特定行)应使用“true”布尔值进行更新。每次在get view中,应从此对象设置progressBar的状态
这应该可以解决您的问题。我曾经遇到过这个问题。之所以出现这种情况,是因为Listview重用了视图(行),它不会为所有行创建视图,它只创建了一些r