Autore Topic: Aggiornare View con ViewPager  (Letto 360 volte)

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Aggiornare View con ViewPager
« il: 20 Gennaio 2015, 12:24:06 CET »
0
Salve a tutti, sto cercando di modificare elementi nel layout di un Fragment in presenza di ViewPager.
A dire il vero ci sono riuscito, solo che ho ottenuto risultati parziali.
In pratica uso un ViewPager abbinato ad un FragmentStatePagerAdapter, nei Fragment sono presenti una ImageView ed una ProgressBar. Un AsyncTask passa qualche secondo a non far nulla e poi deve disattivare la ProgressBar per visualizzare una immagine (in questo caso una risorsa). Io riesco a disattivare la ProgressBar ma non a modificare l'ImageView e non capisco come mai.
L'Activity principale
Codice (Java): [Seleziona]
public class MainActivity extends FragmentActivity {
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                PageAdapter pg = new PageAdapter(super.getSupportFragmentManager(), 4);
                ViewPager pager = (ViewPager) findViewById(R.id.view_pager);
                pager.setAdapter(pg);
               
                Worker w = new Worker(pager);
                w.execute();
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // Handle action bar item clicks here. The action bar will
                // automatically handle clicks on the Home/Up button, so long
                // as you specify a parent activity in AndroidManifest.xml.
                int id = item.getItemId();
                if (id == R.id.action_settings) {
                        return true;
                }
                return super.onOptionsItemSelected(item);
        }
}
Il Fragment
Codice (Java): [Seleziona]
public class PlaceholderFragment extends Fragment {
       
        static int position;
       
        static PlaceholderFragment newInstance(int num){
                final PlaceholderFragment f = new PlaceholderFragment(num);
                return f;              
        }
       
        public PlaceholderFragment(int num) {
                position = num;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);
                ImageView image = (ImageView) rootView.findViewById(R.id.imageView1);
                ProgressBar pb = (ProgressBar) rootView.findViewById(R.id.progressBar1);
                pb.setActivated(true);
                image.setVisibility(View.INVISIBLE);
                pb.setVisibility(View.VISIBLE);
                return rootView;
        }
}

il FragmentStatePagerAdapter.
Codice (Java): [Seleziona]
public class PageAdapter extends FragmentStatePagerAdapter {

        private final int mSize;
        PlaceholderFragment frag = null;

        public PageAdapter(FragmentManager fm, int size) {
                super(fm);
                mSize = size;
        }

        @Override
        public int getCount() {
                return mSize;
        }

        @Override
        public Fragment getItem(int position) {
                frag = PlaceholderFragment.newInstance(position);
                return frag;
        }
       
}

ed l'AsyncTask
Codice (Java): [Seleziona]
public class Worker extends AsyncTask<Void, Void, Void>  {
        ImageView image;
        ProgressBar pb;
        ViewPager pg;
       
        public Worker(ViewPager p) {
                pg = p;
        }
       
        @Override
        protected Void doInBackground(Void... params) {

                try {
                        Thread.sleep(4000);        
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
               
                return null;
        }
       
        @Override
        protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                View v = pg.getRootView();

                pb = (ProgressBar) v.findViewById(R.id.progressBar1);
                image = (ImageView) v.findViewById(R.id.imageView1);
                pg.setVisibility(View.GONE);
                image.setVisibility(View.VISIBLE);
                image.setBackground(v.getResources().getDrawable(R.drawable.ic_launcher));
                v.invalidate();
               
        }
       
        public void stampa(String s){
                Log.v("asd", s);
        }

}

I layout sono:
quello del Fragment
Codice (XML): [Seleziona]
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.example.testspinner.MainActivity$PlaceholderFragment" >

    <ImageView
       android:id="@+id/imageView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:background="@android:color/black" />

    <ProgressBar
       android:id="@+id/progressBar1"
       style="?android:attr/progressBarStyleLarge"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

</FrameLayout>
e quello dell'Activity
Codice (XML): [Seleziona]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/container"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <android.support.v4.view.ViewPager
       android:id="@+id/view_pager"
       android:layout_width="match_parent"
       android:layout_height="0px"
       android:layout_weight="1" >
    </android.support.v4.view.ViewPager>

</LinearLayout>

Dove sbaglio? Perché se posso modificare la ProgressBar dovrei poter modificare anche l'ImageView.


Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Aggiornare View con ViewPager
« Risposta #1 il: 23 Gennaio 2015, 23:21:29 CET »
0
Up

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Aggiornare View con ViewPager
« Risposta #2 il: 24 Gennaio 2015, 10:08:18 CET »
0
Non cambiare il background dell immagine, ma cambia il drawable!

Inviato dal mio Nexus 4 utilizzando Tapatalk

IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Aggiornare View con ViewPager
« Risposta #3 il: 24 Gennaio 2015, 17:57:44 CET »
0
Niente da fare: ho provato con setImageDrawable e anche mettendo subito dopo una invalidate, ma continua a non cambiare nulla.

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Aggiornare View con ViewPager
« Risposta #4 il: 30 Gennaio 2015, 12:36:11 CET »
0
Nessuno che sappia come aiutarmi?