列表视图不刷新总是+屏幕错误



你好,我有一个问题,巫婆Listview

我使用listview来显示列表中的项目。

On create activity is everything okay。…如果我长触摸项目显示的对话框,我可以编辑名称项目,如果确认编辑我切换静态变量与listview活动。(true)这个布尔变量是在计时器上加载的。并设置变量从女巫将读取项目。

我读取带有

的条目
 ListAdapter.clear();
    thadapter.clear();
    for (int i=1;i<prvy.getPacageItem2(indexpacage)+1;i++) {
        ListAdapter.add(String.valueOf(prvy.citajItem(indexpacage,i)));
Toast.makeText(this, "obnovujem" + " "+ prvy.citajItem(indexpacage,i), Toast.LENGTH_SHORT).show();
              }

        thadapter = new MyThumbnailAdapter(getApplication(), R.layout.list_row, ListAdapter);
        List.setAdapter(thadapter);

一切运行。但是如果编辑项目3-5倍这些代码↑添加所有行到适配器,并把它放在列表(Listview),但Listview不能重写Listview显示。我有TOAST在这些代码和程序阅读良好。每一个崩溃在这里

thadapter = new MyThumbnailAdapter(getApplication(), R.layout.list_row, ListAdapter);
        List.setAdapter(thadapter);

但我不知道为什么所有运行良好的一些时间和下一个有一些错误和下一个运行良好的太(某些时候)如果对第一行的项目运行不正常,程序有时也会对其他行运行良好。

它不是重复的,它是随机的…

你有什么想法吗?

谢谢。


这个代码调用的代码读取并把信息放在listview..

 Timer timer = new Timer();
    //TODO timer
    timer.schedule(
            new TimerTask() {
                @Override
                public void run() {
                    runOnUiThread(
                            new Runnable() {
                                @Override
                                public void run() {
                                    if (obnovitem) {
ObnovItem();

                                        obnovitem= false;
                                    }
                                }
                            }
                    );
                }
            }, 0, 150);

sorry for English:/

____________________________________________ 反应的言论

这里我设置静态变量布尔是在定时器和additeminpackage .prvy=prvy;是保存信息的类,我试着放在listview

stats,因为我是从弹出(对话框)

设置的
AddItemInPacage.obnovitem=true;
        AddItemInPacage.prvy=prvy;

这里有一些方法从类,我保存了所有的变量(我需要在这个问题上)。

String[][][] packinglist = new String[6][100][2];
  public String citajItem(int pacage, int item) {
    return packinglist[pacage][item][0];
}
 public void pridajItem(String nazovbalika,int pacagenum) {
    pocItem++;
    setPacageItem2(getPacageItem2(pacagenum)+1,pacagenum);
    packinglist[pacagenum][packageitem++][0]= nazovbalika;
}

_________________________________ 完整代码我 __________________________________

活动,我有listview。

public class AddItemInPacage extends Activity implements
        View.OnClickListener, Runnable, OnKeyListener {
    FlyOutContainer root;
    public static int ktore;
    public static String nazovtripu;
    public static int indexpacage;
    public static Boolean obnovitem=false;
    static myTrip prvy;
  //  public Activity c;
    public Dialog d;
    public Button yes;
    public ImageView no;
    public TextView title;
   // public String nazovtripu;
    Poradie  poradie= new Poradie();
    Boolean vysunuty=false;
    private ListView mainListView ;

    int cisloblik=0;
    private RecyclerView recyclerView;
    private RecyclerAdapter adapter;
 //   List<String> list;
    EditText edt;
    private ListView List;
    MyThumbnailAdapter thadapter = null;
    ArrayList<String> ListAdapter = new ArrayList<String>();
    ArrayList<String> ListAdapterClone = new ArrayList<String>();
    int number_count = 1;
    int pomdeser=0;
/*
    public AddItemInPacage(Activity a,String nazovtripu,int indexpacage) {
        // TODO Auto-generated constructor stub
        this.c = a;
        this.nazovtripu=nazovtripu;
        this.indexpacage=indexpacage;
      //  list = new ArrayList<>();
    }
*/
    public AddItemInPacage(){
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
   //     requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.root = (FlyOutContainer) this.getLayoutInflater().inflate(R.layout.activity_add_item_in_pacage,null);
        this.setContentView(root);
        List = (ListView) findViewById(R.id.listViewTST);
    //    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

    //    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
     //   recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        NacitajBok();
     //   mainListView.setAdapter( listAdapter );

        TextView edit= (TextView)findViewById(R.id.editing);
        title= (TextView)findViewById(R.id.title);

        edt=(EditText)findViewById(R.id.editAdd);
        edt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if ( (actionId == EditorInfo.IME_ACTION_DONE)||(actionId == EditorInfo.IME_ACTION_NEXT)) {
                Add();
            return true;
        }
        else{
            return false;
        }
    }
});

        prvy= DeSerializuj(nazovtripu);
        title.setText(prvy.getNazovTripu());
        edit.setText("ADDING in,,"+ prvy.citajPackageName(indexpacage)+"''");
        for (int i=1;i<prvy.getPacageItem2(indexpacage)+1;i++) {
            ListAdapter.add(String.valueOf(prvy.citajItem(indexpacage,i)));
        }
        thadapter = new MyThumbnailAdapter(this, R.layout.list_row, ListAdapter);
        List.setAdapter(thadapter);

        View.OnClickListener myhandler1 = new View.OnClickListener() {
            public void onClick(View v) {
                Add();
            }
        };
        View.OnClickListener myhandlerfin = new View.OnClickListener() {
            public void onClick(View v) {
                InfoPackingTrip.PrepisImg(indexpacage);
                InfoPackingTrip.Pomocnapokliku();

          //      Collections.reverse(ListAdapter);

                /*
                for (int i=1;i<100;i++) {
                    try {
                        if(ListAdapter.get(i-1)!=null) {
                            prvy.pridajItemRemove(ListAdapter.get(i - 1), indexpacage, i);
                          //  prvy.setPackageitem(i);
                            prvy.setPacageItem2(i,indexpacage);
                            prvy.setPocItem(i);
                        }else {prvy.Nulak(indexpacage,i);}
                    } catch(IndexOutOfBoundsException e) {
                        prvy.Nulak(indexpacage,i);
                    }
                }
                */
                for (int i=ListAdapter.size()-1;i>=0;i--) {
          //      for (int i = 0; i < ListAdapter.size() ; i++) {
                    try {
                            prvy.pridajItemRemove(ListAdapter.get(i), indexpacage, i+1);
                    } catch(IndexOutOfBoundsException e) {
                        prvy.Nulak(indexpacage,i);
                    }
                }
                prvy.setPacageItem2(ListAdapter.size(),indexpacage);
                prvy.setPocItem(ListAdapter.size());
                for (int i=ListAdapter.size();i<99;i++) {
                    prvy.Nulak(indexpacage,i+1);
                }
                Serializuj(prvy,nazovtripu);
                InfoPackingTrip.ktore=ktore;
          //      Intent intent = new Intent(AddItemInPacage.this, InfoPackingTrip.class);
            //    startActivity(intent);
                ///////Hned otvorené vo full verzii nová activity
                startActivity(new Intent(v.getContext(), InfoPackingTrip.class));
                try {
                    this.finalize();
                } catch (Throwable throwable) {
                    throwable.printStackTrace();
                }
                overridePendingTransition(0, 0);
            }
        };
        View.OnClickListener myhandlertoogle = new View.OnClickListener() {
            public void onClick(View v) {
                root.toggleMenu();
                if(vysunuty) {vysunuty=false;} else {vysunuty=true;}
            }
        };

        FrameLayout Addlayout = (FrameLayout)findViewById(R.id.AddNext2);
        Addlayout.setOnClickListener(myhandler1);
        FrameLayout fin = (FrameLayout) findViewById(R.id.btndalej);
        fin.setOnClickListener(myhandlerfin);
        ImageView menu = (ImageView) findViewById(R.id.menu);
        menu.setOnClickListener(myhandlertoogle);
        ImageView back = (ImageView) findViewById(R.id.btnback);
        back.setOnClickListener(myhandlertoogle);

        Kontroler2();
    }

    public void Add() {
        if (!(String.valueOf(edt.getText()).equals(""))) {
            ListAdapter.add(ListAdapter.size(),String.valueOf(edt.getText()));
            thadapter = new MyThumbnailAdapter(this, R.layout.list_row, ListAdapter);
     //       Collections.reverse(ListAdapter);
            List.setAdapter(thadapter);

            prvy.pridajItem(String.valueOf(edt.getText()),indexpacage);
            edt.setText("");
      //      Serializuj(prvy,nazovtripu);
        }
    }

    @Override
    public void onClick(View v) {

    }

    public myTrip DeSerializuj( String odkial) {
        odkial=odkial+".dat";
        myTrip   prvy = null;
        try {
            File file = new File(this.getFilesDir(), odkial);
            FileInputStream fi = new FileInputStream(file);
            ObjectInputStream oi = new ObjectInputStream(fi);
            prvy = (myTrip) oi.readObject();
            oi.close();
            fi.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return prvy;
    }
    public void Serializuj( myTrip serTrip,String kam){
        kam=kam + ".dat";
        try {
            File file = new File(this.getFilesDir(), kam);
            FileOutputStream fo = new FileOutputStream(file);
            ObjectOutputStream ou = new ObjectOutputStream(fo);
            ou.writeObject(serTrip);
            ou.close();
            fo.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /////Swipe
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        // Only if you need to restore open/close state when
        // the orientation is changed
        if (adapter != null) {
            adapter.restoreStates(savedInstanceState);
        }
    }
    // preblik pisania
    private void PreblikPis(int cislo) {
        EditText edt=(EditText)findViewById(R.id.editText);
        if (cislo%2==0) {
            edt.setText("|");
        } else {edt.setText("");}
    }
    @Override
    public void run() {
        try {
            Thread.sleep(500);
        cisloblik++;
        PreblikPis(cisloblik);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        // Listen to "Enter" key press
        if ((keyCode == KeyEvent.KEYCODE_ENTER)||(keyCode == EditorInfo.IME_ACTION_DONE))  {
            //Toast.makeText(c, "sdaaa", Toast.LENGTH_SHORT).show();
            Add();
            return true;
        }
        if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION) {
            //your code here
            Add();
            return true;
        }
        return false;
    }
    private void NacitajBok() {
        TextView tv = (TextView) findViewById(R.id.Yourtrips);
        Typeface firstTripText = Typeface.createFromAsset(this.getAssets(), "fonts/ROBOTOSLAB-BOLD.TTF");
        tv.setTypeface(firstTripText);
        tv = (TextView) findViewById(R.id.settings);
        tv.setTypeface(firstTripText);
        tv = (TextView) findViewById(R.id.about);
        tv.setTypeface(firstTripText);
        firstTripText = Typeface.createFromAsset(this.getAssets(), "fonts/Roboto-Regular.ttf");
        tv = (TextView) findViewById(R.id.addTrip);
        tv.setTypeface(firstTripText);
        ListView mainListView;
        ArrayAdapter<String> listAdapter;
        // Find the ListView resource.
        mainListView = (ListView) findViewById(R.id.listView);
        // Create and populate a List of planet names.
        String[] trips = new String[]{};
        ArrayList<String> tripList = new ArrayList<String>();
        tripList.addAll(Arrays.asList(trips));
        // Create ArrayAdapter using the planet list.
        listAdapter = new ArrayAdapter<String>(this, R.layout.listrow_bocny, tripList);

        poradie = DeSerializujporadie();
        if (poradie != null) {
            //int pppo =  poradie.getI();
            for (int i = 0; i < poradie.getI(); i++) {

                listAdapter.add(String.valueOf(poradie.Citaj(i)).substring(0, String.valueOf(poradie.Citaj(i)).length() - 4));
            }
            mainListView.setAdapter(listAdapter);
            mainListView.setOnItemClickListener(
                    new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {

                            view.setBackgroundColor(Color.argb(255,253,62,86));
                            TextView yourTextView = (TextView) view.findViewById(R.id.textView1);
                            yourTextView.setTextColor(Color.WHITE);

                            android.os.Handler mHandler = new android.os.Handler();
                            mHandler.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    InfoPackingTrip.ktore=poradie.Zistikolke(poradie.Citaj(position));
                                    Intent intent = new Intent(AddItemInPacage.this, InfoPackingTrip.class);
                                    startActivity(intent);
                                    try {
                                        this.finalize();
                                    } catch (Throwable throwable) {
                                        throwable.printStackTrace();
                                        Toast.makeText(AddItemInPacage.this, "nevydal koniec", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            }, 50);

                        }
                    }
            );
        }

        FrameLayout yourTrips=(FrameLayout)findViewById(R.id.yourtrips);
        yourTrips.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(AddItemInPacage.this, IndexFull.class);
                startActivity(intent);
                try {
                    this.finalize();
                } catch (Throwable throwable) {
                    throwable.printStackTrace();
                    Toast.makeText(AddItemInPacage.this, "nevydal koniec", Toast.LENGTH_SHORT).show();
                }
            }
        });
        FrameLayout toogle=(FrameLayout)findViewById(R.id.tooglem);
        toogle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {root.toggleMenu();}
        });

    }
    @Override
    public void onBackPressed() {
        // your code.
        if(vysunuty) {
            vysunuty=false;
            this.root.toggleMenu();
        }

    }
    public Poradie DeSerializujporadie() {
        Poradie  por = null;
        try {
            File file = new File(this.getFilesDir(), "poradie.dat");
            FileInputStream fi = new FileInputStream(file);
            ObjectInputStream oi = new ObjectInputStream(fi);
            por= (Poradie) oi.readObject();
            oi.close();
            fi.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return por;
    }
    //TODO listview
    public class MyThumbnailAdapter extends ArrayAdapter<String> {
        ArrayList<String> arr;
        private TextView text;
        public MyThumbnailAdapter(Context context, int textViewResourceId, ArrayList<String> objects) {
            super(context, textViewResourceId, objects);
            this.arr = objects;
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View view = null;
            LayoutInflater inflater = getLayoutInflater();
            view = inflater.inflate(R.layout.list_row, parent, false);
            TextView textnumber = (TextView) view.findViewById(R.id.text);
            ImageView delButton = (ImageView) view.findViewById(R.id.btn_del);
          Typeface  robtoLight = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf");
            textnumber.setTypeface(robtoLight);
            delButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    arr.remove(position);
                    thadapter.notifyDataSetChanged();
                    Toast.makeText(getContext(), "Item deleted", Toast.LENGTH_SHORT).show();
                }
            });
            textnumber.setText(arr.get(position));

            textnumber.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    for (int i=ListAdapter.size()-1;i>=0;i--) {
                        //      for (int i = 0; i < ListAdapter.size() ; i++) {
                        try {
                            prvy.pridajItemRemove(ListAdapter.get(i), indexpacage, i+1);
                        } catch(IndexOutOfBoundsException e) {
                            prvy.Nulak(indexpacage,i);
                        }
                    }
                    prvy.setPacageItem2(ListAdapter.size(),indexpacage);
                    prvy.setPocItem(ListAdapter.size());
                    for (int i=ListAdapter.size();i<99;i++) {
                        prvy.Nulak(indexpacage,i+1);
                    }
                    Serializuj(prvy,nazovtripu);

                    EditItemDialog cdd=new EditItemDialog(AddItemInPacage.this,nazovtripu,position+1,indexpacage);
                    cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                    cdd.show();

                    return true;
                }
            });
            return view;
        }
    }

    private void Kontroler2() {
        Timer timer = new Timer();
        //TODO timer
        timer.schedule(
                new TimerTask() {
                    @Override
                    public void run() {
                        runOnUiThread(
                                new Runnable() {
                                    @Override
                                    public void run() {
                                        if (obnovitem) {
                                            /*
                                            pomdeser++;
                                            if(pomdeser==5){
                                            obnovitem=false;
                                            pomdeser=0;}
                                            */
                                            ObnovItem();
                                            obnovitem= false;
                                        }
                                    }
                                }
                        );
                    }
                }, 0, 150);
    }
    public void ObnovItem() {
     //   prvy= DeSerializuj(nazovtripu);

        ListAdapter.clear();
        thadapter.clear();
        for (int i=1;i<prvy.getPacageItem2(indexpacage)+1;i++) {
            ListAdapter.add(String.valueOf(prvy.citajItem(indexpacage,i)));
            Toast.makeText(this, "obnovujem" + " "+ prvy.citajItem(indexpacage,i), Toast.LENGTH_SHORT).show();
        }

            thadapter = new MyThumbnailAdapter(getApplication(), R.layout.list_row, ListAdapter);
            this.List.setAdapter(thadapter);
        int tralal=0;

    }

}
对话框

 package com.example.flyoutmenuexample;
/**
 * Created by Paradox on 25. 10. 2016.
 */

public class EditItemDialog extends Dialog implements
        android.view.View.OnClickListener {
    public Activity c;
    public Dialog d;
    public Button yes;
    public ImageView no;
    public ImageView lin;
    public EditText title;
    myTrip prvy;
    int poz;
    int indexpacage;

    public String nazovtripu;
    public EditItemDialog(){
        super(null);
    }
    public EditItemDialog(Activity a,String nazovtripu,int poz,int indexpacage) {
        super(a);
        // TODO Auto-generated constructor stub
        this.c = a;
        this.nazovtripu=nazovtripu;
        this.poz=poz;
        this.indexpacage=indexpacage;


    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
   //     requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_edit_dialog_items);
        getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
     //   getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        title = (EditText)findViewById(R.id.editText3) ;
        prvy= DeSerializuj(nazovtripu);
        title.setText(prvy.citajItem(indexpacage,poz));

     //   title.setBackgroundColor(Color.argb(0,254,254,254));

        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

        title.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if ( (actionId == EditorInfo.IME_ACTION_DONE)||(actionId == EditorInfo.IME_ACTION_NEXT)) {
                    if (!(String.valueOf(title.getText()).equals(""))) {
                        String tst = Add();
                        dismiss();
                    } else {
                        Toast.makeText(c, "Napíš dačo", Toast.LENGTH_SHORT).show();
                    }
                    return true;
                }
                else{
                    return false;
                }
            }
        });
    }
    private String Add(){
        String novypacage=String.valueOf(title.getText());
        prvy.EditItem(indexpacage,poz,novypacage);
      //  Serializuj(prvy,nazovtripu);
        //  InfoPackingTrip.PrepisImg(prvy.getPackageNum());
        AddItemInPacage.obnovitem=true;
        AddItemInPacage.prvy=prvy;
        return  nazovtripu ;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_yes:
                String tst= Add();
                dismiss();
                // c.finish();
                break;
            case R.id.end:
                dismiss();
                break;
            case R.id.endlin:
                dismiss();
                break;
            default:
                break;
        }
    }
    public myTrip DeSerializuj( String odkial) {
        odkial=odkial+".dat";
        myTrip   prvy = null;
        try {
            File file = new File(getContext().getFilesDir(), odkial);
            FileInputStream fi = new FileInputStream(file);
            ObjectInputStream oi = new ObjectInputStream(fi);
            prvy = (myTrip) oi.readObject();
            oi.close();
            fi.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return prvy;
    }
    public void Serializuj( myTrip serTrip,String kam){
        kam=kam + ".dat";
        try {
            File file = new File(getContext().getFilesDir(), kam);
            FileOutputStream fo = new FileOutputStream(file);
            ObjectOutputStream ou = new ObjectOutputStream(fo);
            ou.writeObject(serTrip);
            ou.close();
            fo.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onBackPressed() {

       dismiss();

    }    
}
屏幕

错误的观点

有时如果我编辑行Toas读好的字符串,但Listview没有重写。

当你改变ListView使用的数据时,你必须调用列表适配器上的notifyDataSetChanged()

我需要一个同步的确认编辑对话框的方法重写Listview。

或从

切换顺序
AddItemInPacage.obnovitem = true;
AddItemInPacage.prvy = prvy;

AddItemInPacage.prvy = prvy;
AddItemInPacage.obnovitem = true;

因为如果AddItemInPacage.obnovitem=true;优先活动在变量prvy中处理旧信息。当变量从对话框中被填满时。Listview在此变量中完成旧信息的处理。