gridview меняет положение автоматически при уведомлении DataSetChangedCalled? - PullRequest
1 голос
/ 25 августа 2011

здесь - приложение, в котором я отображаю некоторый текст с фоновым изображением, но он автоматически меняет положение при вызове messagesdatasetchanged (), пожалуйста, помогите мне как исправить его постоянную позицию, ниже мой код.спасибо вам

 public View getView(final int position, View convertView, ViewGroup parent) {
        //ImageView imageView;
        View v;
        TextView tv = null;
        if (convertView == null) { 


            LayoutInflater li = getLayoutInflater();
            v = li.inflate(R.layout.show_table_gridview, null);
            tv = (TextView)      
                            v.findViewById(R.id.tab_num);
            tv.setText(""+position+1));                 

            tv.setTextColor(Color.BLACK);
            HashMap<Integer, List<OrderlistData>> orederMap1 = ConText
            .getTotlaMap();
            List<OrderlistData> orderlist1 = new ArrayList<OrderlistData>();
            Set<Integer> keySet1 = orederMap1.keySet();
              if (keySet1.contains(position))
                  orderlist1 = orederMap1.get(position);

              if (orderlist1.isEmpty()){

              }
            else{
              tv.setBackgroundColor(Color.CYAN);
             }
          } 
           else {
            v =  convertView;
        }
        /**
         * Code for changing background if data is content
         */
        return v;
    }

вот код для обновления gridview каждые 20 секунд
// ============= Обновление gridview ==============

  private class UpdateGridview extends AsyncTask<Context, Integer, String>
     {

    @Override
    protected String doInBackground(Context... params) {

        int i = 0;
        while (i < 10) {
            try {
                Thread.sleep(30000);
                Message msg = handler.obtainMessage();
                handler.sendMessage(msg);

                i++;
            } catch (Exception e) {
                Log.i("makemachine", e.getMessage());
            }
        }
        return "COMPLETE!";
    }

        private final Handler handler = new Handler() {
            public void handleMessage(Message msg) {

                getCurrent_orderlist_StatusFromServer();
                gridadapter.notifyDataSetChanged();

                System.out
                        .println("i  called notifyDataSetChanged()=======================");
            }
        };


        // -- gets called just before thread begins
        @Override
        protected void onPreExecute() 
        {
                Log.i( "makemachine", "onPreExecute()" );
                super.onPreExecute();

        }


        @Override
        protected void onProgressUpdate(Integer... values) 
        {
                super.onProgressUpdate(values);

        }

        // -- called if the cancel button is pressed
        @Override
        protected void onCancelled()
        {
                super.onCancelled();
               Log.i( "makemachine", "onCancelled()" );

        }

        // -- called as soon as doInBackground method completes
        // -- notice that the third param gets passed to this method
        @Override
        protected void onPostExecute( String result ) 
        {
                super.onPostExecute(result);
                Log.i( "makemachine", "onPostExecute(): " + result );

        }

}

1 Ответ

2 голосов
/ 12 ноября 2011

Это происходит так, потому что вы даете условие if.Это потому, что в первый раз назначается только convertview.Во второй раз он не входит в условие if.И вы должны выполнить коды в if.Так что просто удалите условие if, оно будет работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...