Ich bin Nuebie in Android. Ich nehme an, ich versuche Code aus nicht UI-Thread ausführen. Wie kann ich mein Raster in Fragment aktualisieren? Ich habe Aktivität SimpleImageActivity. In dieser Aktivität warte ich auf die Zurück-Taste und versuche, meine Daten in GridView zu aktualisieren. Methode invalidate() postInvalidate()
nichts tun.Grid.Invalidate in Fragment von FragmentActivity
private Handler handler;
protected OnBackPressedListener onBackPressedListener;
public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) {
this.onBackPressedListener = onBackPressedListener;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fragment fr;
String tag= GridViewFragment.class.getSimpleName();
fr = getSupportFragmentManager().findFragmentByTag(tag);
if (fr == null) {
fr = new GridViewFragment();
}
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, fr, tag).commit();
}
@Override
public void onBackPressed() {
if (onBackPressedListener != null){
// ...some code...
handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
System.out.println("[VAN] I am in Runnable");
GridView gV = (GridView)findViewById(R.id.grid); // gV - links to my GridView and not null here
gV.invalidate(); //this code nothing doing
gV.postInvalidate(); //this code nothing doing too
}
}, 0);
onBackPressedListener.onBackPres(); // event Back key for fragment
}
In meinem GridViewFragment Ich versuche gridView.invalidate
auch ausführen, aber in Fragmente unter gridview = null
public class GridViewFragment extends AbsListViewBaseFragment implements OnBackPressedListener {
public GridView gridView;
private FragmentActivity activity;
View rootView;
public GridViewFragment() {
this.activity = getActivity();
}
@Override
public void onBackPres() {
new Thread(new Runnable() {
public void run() {
updateScreen();
// I am try this
// gridView.invalidate() there not working, because gridView=null
//
System.out.println("[VAN] updateScreen");
}
}).start();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
activity = getActivity();
((SimpleImageActivity)activity).setOnBackPressedListener(new GridViewFragment());
rootView = inflater.inflate(R.layout.fragment_image_grid, container, false);
gridView = (GridView) rootView.findViewById(R.id.grid);
// ... some code ...
}
private void updateScreen(){
gridView.postInvalidate(); // error because there gridView=null
}
Wie ich meine Gridview aktualisieren kann? Beim Auslösen der Methode public void onBackPres() {
in Fragment gridView.invalidate
- funktioniert nicht, da gridView = null. Wenn in Aktivität handler.postDelayed(new Runnable() {
gV meine GridView zurückgeben, aber gV.invalidate(); gV.postInvalidate();
nichts tun und ohne Fehler ausgeführt werden.
Versuchen Sie, diese http://stackoverflow.com/questions/11123621/running-code-in-main- folgen thread-from-another-thread – Amit
Danke, nach Deinem Rat, versuche ich '' gV.invalidate(); 'zu' gV.invalidateViews(); 'zu ersetzen und es funktioniert – van4ik