Android 列表视图项';从屏幕上滚动视图后,s视图将返回到原始状态

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

我在listview项目中有一个按钮,当它被单击时,水平进度条开始加载,当加载完成时,两个按钮应该出现在listview项目中。当progressbar下载时,如果我从屏幕上滚动该项目,然后将其向后滚动,progressbar将消失,并出现两个按钮。下载过程运行良好。但是我想在下载的时候显示进度条? 这是我的适配器。请帮忙。提前谢谢

@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