Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android:当我启动一项新活动时,Listview会自行复制,然后按回去返回它大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个列表视图,它们是视图分页器选项卡中的片段.单击列表视图中的项目时,它将启动一个新活动.但是,当我按下后退按钮返回选项卡列表视图时,列表视图加倍,如果我打开活动并再次返回,它会再次翻倍,它会继续这样做.此外,我还有另一个带有五个选项卡的选项卡列表视图,当我从其中一个视图中选择两个选项卡时.当我回到它们时,该视图中的项目会加倍,这对于所有其他选项卡都是相同的.两个listviews的代码完全相同.我已经尝试过list.clear(),它只是清除了所有列表项,并且在视图持有者中使用了“else”语句(由其他堆栈溢出答案推荐).但每次列表视图仍然重复.除非你没有注意到,否则我对 android很新.

这是列表视图片段(Due_Today_Fragment)的代码,它位于双标签活动中.

import java.util.ArrayList;
import java.util.List;

import android.content.Intent;
import android.os.bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;


public class Due_Today_Fragment extends Fragment  {
    private List<homeworkdue> myhomeworkdue;

    static class ViewHolder {
        public ImageView imageView;
        public TextView HomeworkDueText;
        public TextView Descriptiontext;
        public TextView TeacherText;
      }


    public static final String KEY_HOMEWORK="homework";
    public static final String KEY_DESC="desc";

    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceStatE){
        return inflater.inflate(R.layout.activity_main,container,falsE); }


    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        myhomeworkdue = new ArrayList<homeworkdue>();
        populatehomeworkdueList();
        populateListView();
        registerClickCallBACk();
    }

    private void registerClickCallBACk() {
        ListView list = (ListView)getView().findViewById(R.id.listView1);
        list.setOnItemClickListener(new AdapterView.onItemClickListener() {

            public void onItemClick(AdapterView<?> parent,View viewClicked,int position,long id) {

                homeworkdue clickedhomeworkdue = myhomeworkdue.get(position);

                Intent intent = new Intent(getActivity(),homeworkdueDetailsActivity.class);
                intent.putExtra(KEY_HOMEWORK,clickedhomeworkdue.getHomeworkdue());
                intent.putExtra(KEY_DESC,clickedhomeworkdue.getDesciption());

                startActivity(intent);
            }
        });
        }


    private void populatehomeworkdueList() {
        myhomeworkdue.add(new homeworkdue("History Homework","Description 1",R.drawable.global_studies,"Anderson"));
        myhomeworkdue.add(new homeworkdue("Math Homework","Description 2",R.drawable.mathematics,"Klein"));
        myhomeworkdue.add(new homeworkdue("English Homework","Description 3",R.drawable.english,"Reed"));
        myhomeworkdue.add(new homeworkdue("Spanish Homework","Description 4",R.drawable.spanish,"Joya"));
        myhomeworkdue.add(new homeworkdue("Science Homework","Description 5",R.drawable.science,"Poole"));
    }

    private void populateListView() {
        ArrayAdapter<homeworkdue> adapter = new Mylistadapter();
        ListView list = (ListView)getView().findViewById(R.id.listView1);
        list.setAdapter(adapter);


    }


    public class Mylistadapter extends ArrayAdapter<homeworkdue>  {
        public Mylistadapter() {
            super(getActivity(),R.layout.item_view,myhomeworkduE);
        }

        @Override
        public View getView(int position,View convertView,ViewGroup parent) {
            ViewHolder holder;

            if(convertView==null){
            convertView = getActivity().getLayoutInflater().inflate(R.layout.item_view,parent,falsE);
             holder = new ViewHolder();

             holder.imageView = (ImageView)convertView.findViewById(R.id.item_iconclass);

            holder.HomeworkDueText = (TextView) convertView.findViewById(R.id.item_texthomeworkduE);

            holder.Descriptiontext = (TextView) convertView.findViewById(R.id.item_textdescription);

            holder.TeacherText = (TextView) convertView.findViewById(R.id.item_textteacher);

            convertView.setTag(holder);


            }

        else {
            holder = (ViewHolder) convertView.getTag();
        }

        homeworkdue currenthomeworkdue = myhomeworkdue.get(position);

        holder.imageView.setImageresource(currenthomeworkdue.getIconID());


        holder.HomeworkDueText.setText(currenthomeworkdue.getHomeworkdue());


        holder.Descriptiontext.setText(currenthomeworkdue.getDesciption());


        holder.TeacherText.setText(currenthomeworkdue.getTeacher());

        return convertView;

    }

        }


}

以下是单击列表视图项时启动的活动的代码

import android.app.Activity;
import android.content.Intent;
import android.os.bundle;
import android.view.Menu;
import android.widget.TextView;
import static com.bernard.beaconportal.Due_Today_Fragment.KEY_HOMEWORK;
import static com.bernard.beaconportal.Due_Today_Fragment.KEY_DESc;


public class homeworkdueDetailsActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceStatE) {
        super.onCreate(savedInstanceStatE);
        setContentView(R.layout.activity_details);

        String homework = "";
        String desc = "";

        Intent intent = geTintent();
        if (null != intent) {
            homework = intent.getStringExtra(KEY_HOMEWORK);
            desc = intent.getStringExtra(KEY_desc);
        }

        TextView headlineTxt = (TextView) findViewById(R.id.texthomeworkduE);
        headlineTxt.setText(homework);

        TextView pubdateTxt = (TextView) findViewById(R.id.textdescription);
        pubdateTxt.setText(desc);

    }


}

这是tabs片段的代码

import java.lang.reflect.Field;
import com.actionbarsherlock.app.SherlockFragment;
import com.astuetz.PagerSlidingTabStrip;

import android.os.bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragments2 extends SherlockFragment {

    @Override
    public View onCreateView(LayoutInflater inflater,Bundle savedInstanceStatE) {
        View view = inflater.inflate(R.layout.viewpager_main,falsE);
        // Locate the ViewPager in viewpager_main.xml
        ViewPager pager = (ViewPager) view.findViewById(R.id.viewPager);
        // Set the ViewPagerAdapter into ViewPager
        pager.setAdapter(new ViewPagerAdapter(getChildFragmentManager()));
        PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) view.findViewById(R.id.pagerTabStrip);
        tabs.setViewPager(pager);

        return view;
    }

    @Override
    public void onDetach() {
        super.onDetach();
        try {
            Field childFragmentManager = Fragment.class
                    .getDeclaredField("mChildFragmentManager");
            childFragmentManager.setAccessible(true);
            childFragmentManager.set(this,null);
        } catch (NoSuchFieldException E) {
            throw new RuntimeException(E);
        } catch (illegalaccessexception E) {
            throw new RuntimeException(E);
        }
    }
}

这里是为家庭作业定义字符串的地方

public class homeworkdue {
    private String homework;
    private String desc;
    privatE int IconID;
    private String teacher;



    public homeworkdue(String homework,String desc,int IconID,String teacher) {



        super();
        this.homework = homework;
        this.desc = desc;
        this.IconID = IconID;
        this.teacher = teacher;
    }

    public String getHomeworkdue() {
        return homework;
    }
    public String getDesciption() {
        return desc;
    }   
    public int getIconID() {
        return IconID;
    }   
    public String getTeacher() {
        return teacher;
    }


    }

这是片段的代码,它包含在五个选项卡中

import java.util.ArrayList;
import java.util.List;

import android.os.bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;


public class Thursday extends Fragment  {



    public View onCreateView(LayoutInflater inflater,Bundle savedInstanceStatE){
        return inflater.inflate(R.layout.schedule_list_view,falsE); }

    private List<schedule> myschedule = new ArrayList<schedule>();



    static class ViewHolder {

        public TextView HomeworkDueText;
      }

    public void onStart() {
        super.onStart();

        populatescheduleList();
        populateListView();

    }


    private void populatescheduleList() {
        myschedule.add(new schedule("E Band"));
        myschedule.add(new schedule("G Band"));
        myschedule.add(new schedule("F Band"));
        myschedule.add(new schedule("H Band"));
        myschedule.add(new schedule("A Band"));
        myschedule.add(new schedule("C Band"));
        myschedule.add(new schedule("D Band"));
    }

    private void populateListView() {
        ArrayAdapter<schedule> adapter = new Mylistadapter();
        ListView list = (ListView)getView().findViewById(R.id.listView2);
        list.setAdapter(adapter);

    }


     public class Mylistadapter extends ArrayAdapter<schedule>  {
            public Mylistadapter() {
                super(getActivity(),myschedulE);
            }

            @Override
            public View getView(int position,ViewGroup parent) {
                ViewHolder holder;

                if(convertView==null){
                    convertView = getActivity().getLayoutInflater().inflate(R.layout.schedule_list_item,falsE);
                 holder = new ViewHolder();

                 holder.HomeworkDueText = (TextView) convertView.findViewById(R.id.bandText);

                convertView.setTag(holder);
                }

            else {
                holder = (ViewHolder) convertView.getTag();
            }

                schedule currenthomeworkdue = myschedule.get(position);

                holder.HomeworkDueText.setText(currenthomeworkdue.band());

            return convertView;


        }

        }

}

这里是为计划定义字符串的地方

public class schedule {
    private String band;




    public schedule(String band) {



        super();
        this.band = band;

    }

    public String Band() {
        return band;


    }

}

如果您需要更多信息,请提前询问并感谢您的帮助

我一直试图修复这个错误两天,我的智慧结束了.

解决方法

我们在创建片段时一次声明一个新List的原因,所以当你回到你的片段时它不会声明一个新片段,而是使用旧片段.所以为了解决这个问题,你需要将以下代码分成两部分:
private List<homeworkdue> myhomeworkdue = new ArrayList<homeworkdue>();

部分在你的片段中进入onResume,你还需要删除onStart和onStart中的所有内容到onResume.但首先保持这样的声明:

private List<homeworkdue> myhomeworkdue;

并将其余部分移至onResume.

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    myhomeworkdue = new ArrayList<homeworkdue>();
    populatehomeworkdueList();
    populateListView();
    registerClickCallBACk();
}

您的第二个ListView中的相同问题,因为它们是相同的.

希望这对你有用.如果有效,请给我一个反馈.

大佬总结

以上是大佬教程为你收集整理的Android:当我启动一项新活动时,Listview会自行复制,然后按回去返回它全部内容,希望文章能够帮你解决Android:当我启动一项新活动时,Listview会自行复制,然后按回去返回它所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。