When viewing images, the list in the background will scroll to the post containing the viewed image.

captchafix
Florens Douwes 12 years ago
parent 052acee30d
commit 73fa4dd87e
  1. 15
      Chan/src/org/floens/chan/adapter/PostAdapter.java
  2. 16
      Chan/src/org/floens/chan/fragment/ThreadFragment.java
  3. 29
      Chan/src/org/floens/chan/imageview/activity/ImageViewActivity.java

@ -13,6 +13,7 @@ import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
@ -20,13 +21,15 @@ import android.widget.TextView;
public class PostAdapter extends BaseAdapter {
private final Context activity;
private final ThreadManager threadManager;
private final ListView listView;
private boolean endOfLine;
private int count = 0;
private final List<Post> postList = new ArrayList<Post>();
public PostAdapter(Context activity, ThreadManager threadManager) {
public PostAdapter(Context activity, ThreadManager threadManager, ListView listView) {
this.activity = activity;
this.threadManager = threadManager;
this.listView = listView;
}
@Override
@ -101,6 +104,16 @@ public class PostAdapter extends BaseAdapter {
notifyDataSetChanged();
}
public void scrollToPost(Post post) {
for (int i = 0; i < postList.size(); i++) {
if (postList.get(i) == post) {
listView.smoothScrollToPosition(i);
break;
}
}
}
}

@ -1,6 +1,5 @@
package org.floens.chan.fragment;
import java.util.ArrayList;
import java.util.List;
import org.floens.chan.R;
@ -96,9 +95,10 @@ public class ThreadFragment extends Fragment implements ThreadListener {
if (!shown) {
shown = true;
postAdapter = new PostAdapter(baseActivity, threadManager);
listView = new ListView(baseActivity);
postAdapter = new PostAdapter(baseActivity, threadManager, listView);
listView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
listView.setAdapter(postAdapter);
listView.setSelectionFromTop(loadable.listViewIndex, loadable.listViewTop);
@ -147,15 +147,7 @@ public class ThreadFragment extends Fragment implements ThreadListener {
public void onThumbnailClicked(Post source) {
if (isDetached() || postAdapter == null) return;
ArrayList<Post> withImages = new ArrayList<Post>();
for (Post post : postAdapter.getList()) {
if (post.hasImage){
withImages.add(post);
}
}
ImageViewActivity.setPosts(withImages, source.no);
ImageViewActivity.setAdapter(postAdapter, source.no);
Intent intent = new Intent(baseActivity, ImageViewActivity.class);
baseActivity.startActivity(intent);

@ -3,6 +3,7 @@ package org.floens.chan.imageview.activity;
import java.util.ArrayList;
import org.floens.chan.R;
import org.floens.chan.adapter.PostAdapter;
import org.floens.chan.imageview.ImageSaver;
import org.floens.chan.imageview.adapter.ImageViewAdapter;
import org.floens.chan.model.Post;
@ -21,7 +22,7 @@ import android.view.Window;
* and then start the activity with startActivity()
*/
public class ImageViewActivity extends Activity implements ViewPager.OnPageChangeListener {
private static ArrayList<Post> imagePosts;
private static PostAdapter postAdapter;
private static int selectedId = -1;
private ImageViewAdapter adapter;
@ -33,8 +34,8 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
* @param other the posts to get image data from
* @param selected the no that the user clicked on
*/
public static void setPosts(ArrayList<Post> other, int selected) {
imagePosts = other;
public static void setAdapter(PostAdapter adapter, int selected) {
postAdapter = adapter;
selectedId = selected;
}
@ -46,19 +47,26 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
super.onCreate(savedInstanceState);
if (imagePosts != null) {
setContentView(R.layout.image_pager);
if (postAdapter != null) {
// Get the posts with images
ArrayList<Post> imagePosts = new ArrayList<Post>();
for (Post post : postAdapter.getList()) {
if (post.hasImage){
imagePosts.add(post);
}
}
// Setup our pages and adapter
setContentView(R.layout.image_pager);
ViewPager viewPager = (ViewPager) findViewById(R.id.image_pager);
adapter = new ImageViewAdapter(getFragmentManager(), this);
adapter.addToList(imagePosts);
viewPager.setAdapter(adapter);
viewPager.setOnPageChangeListener(this);
progressData = new boolean[imagePosts.size()];
// Select the right image
for (int i = 0; i < imagePosts.size(); i++) {
if (imagePosts.get(i).no == selectedId) {
viewPager.setCurrentItem(i);
@ -66,8 +74,6 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
break;
}
}
imagePosts = null;
} else {
Log.e("Chan", "Posts in imageview list was null");
finish();
@ -78,6 +84,7 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
public void finish() {
super.finish();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
postAdapter = null;
}
@Override
@ -136,6 +143,10 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
getActionBar().setTitle(text);
}
if (postAdapter != null) {
postAdapter.scrollToPost(post);
}
}
@Override

Loading…
Cancel
Save