Добавлен просмотр сообщений форума
This commit is contained in:
parent
a9f0aecd60
commit
f91ddb6a83
28
res/layout/forum_post_item.xml
Normal file
28
res/layout/forum_post_item.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/forum_author"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentTop="true" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/forum_date"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/forum_message"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true" />
|
||||
|
||||
</RelativeLayout>
|
66
src/com/annimon/client/adapters/ForumPostAdapter.java
Normal file
66
src/com/annimon/client/adapters/ForumPostAdapter.java
Normal file
@ -0,0 +1,66 @@
|
||||
package com.annimon.client.adapters;
|
||||
|
||||
import java.util.List;
|
||||
import com.annimon.client.R;
|
||||
import com.annimon.client.entities.ForumPost;
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
||||
public class ForumPostAdapter extends BaseAdapter {
|
||||
|
||||
private final LayoutInflater inflater;
|
||||
private List<ForumPost> items;
|
||||
|
||||
public ForumPostAdapter(Context context, List<ForumPost> items) {
|
||||
inflater = LayoutInflater.from(context);
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return items.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int position) {
|
||||
return items.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
final ViewHolder holder;
|
||||
if (convertView == null) {
|
||||
int layoutId = R.layout.forum_post_item;
|
||||
convertView = inflater.inflate(layoutId, parent, false);
|
||||
|
||||
holder = new ViewHolder();
|
||||
holder.author = (TextView) convertView.findViewById(R.id.forum_author);
|
||||
holder.date = (TextView) convertView.findViewById(R.id.forum_date);
|
||||
holder.message = (TextView) convertView.findViewById(R.id.forum_message);
|
||||
convertView.setTag(holder);
|
||||
} else {
|
||||
holder = (ViewHolder) convertView.getTag();
|
||||
}
|
||||
|
||||
final ForumPost post = items.get(position);
|
||||
holder.author.setText(post.getAuthor());
|
||||
holder.date.setText(post.getDate());
|
||||
holder.message.setText(post.getMessage());
|
||||
|
||||
return convertView;
|
||||
}
|
||||
|
||||
private static class ViewHolder {
|
||||
TextView author, date, message;
|
||||
}
|
||||
}
|
@ -2,8 +2,8 @@ package com.annimon.client.entities;
|
||||
|
||||
public class Action {
|
||||
|
||||
public String name;
|
||||
public String path;
|
||||
private String name;
|
||||
private String path;
|
||||
|
||||
public Action(String name, String path) {
|
||||
this.name = name;
|
||||
|
43
src/com/annimon/client/entities/ForumPost.java
Normal file
43
src/com/annimon/client/entities/ForumPost.java
Normal file
@ -0,0 +1,43 @@
|
||||
package com.annimon.client.entities;
|
||||
|
||||
public class ForumPost {
|
||||
|
||||
private String forumTitle;
|
||||
private String author;
|
||||
private String date;
|
||||
private String message;
|
||||
|
||||
public String getForumTitle() {
|
||||
return forumTitle;
|
||||
}
|
||||
|
||||
public void setForumTitle(String forumTitle) {
|
||||
this.forumTitle = forumTitle;
|
||||
}
|
||||
|
||||
public String getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public void setAuthor(String author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
|
||||
public String getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(String date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
}
|
@ -1,34 +1,33 @@
|
||||
package com.annimon.client.fragments;
|
||||
|
||||
import android.app.Fragment;
|
||||
import java.util.List;
|
||||
import android.app.ListFragment;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import android.widget.TextView;
|
||||
import com.annimon.client.adapters.ForumPostAdapter;
|
||||
import com.annimon.client.entities.ForumPost;
|
||||
import com.annimon.client.tasks.ForumPostLoader;
|
||||
|
||||
public class ForumFragment extends Fragment {
|
||||
public class ForumFragment extends ListFragment {
|
||||
|
||||
private static final String URL = "http://annimon.com/rss/forumreader.php";
|
||||
|
||||
private ForumPostAdapter adapter;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
//final View v = inflater.inflate(R.layout.about, container, false);
|
||||
|
||||
//TextView tv = new TextView(getActivity());
|
||||
//tv.setText("This is forum fragment " + System.currentTimeMillis());
|
||||
|
||||
WebView wv = new WebView(getActivity());
|
||||
wv.setWebViewClient(new WebViewClient() {
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
return super.shouldOverrideUrlLoading(view, url);
|
||||
update();
|
||||
}
|
||||
});
|
||||
wv.loadUrl("http://annimon.com/forum/");
|
||||
|
||||
return wv;
|
||||
private void update() {
|
||||
new ForumPostLoader(getActivity(), new ForumPostLoader.FinishLoadingListener() {
|
||||
|
||||
@Override
|
||||
public void onLoadingFinished(List<ForumPost> items) {
|
||||
adapter = new ForumPostAdapter(getActivity(), items);
|
||||
setListAdapter(adapter);
|
||||
}
|
||||
}).execute(URL);
|
||||
}
|
||||
}
|
||||
|
79
src/com/annimon/client/tasks/ForumPostLoader.java
Normal file
79
src/com/annimon/client/tasks/ForumPostLoader.java
Normal file
@ -0,0 +1,79 @@
|
||||
package com.annimon.client.tasks;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import com.annimon.client.entities.ForumPost;
|
||||
import com.annimon.client.utils.InetUtils;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.text.TextUtils;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class ForumPostLoader extends AsyncTask<String, Void, List<ForumPost>> {
|
||||
|
||||
private static final String SEPARATOR = "|$|";
|
||||
|
||||
private Context context;
|
||||
private FinishLoadingListener listener;
|
||||
private AlertDialog dialog;
|
||||
|
||||
public ForumPostLoader(Context context, FinishLoadingListener listener) {
|
||||
this.context = context;
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<ForumPost> doInBackground(String... params) {
|
||||
final String text = InetUtils.getTextFromUri(params[0]);
|
||||
if (TextUtils.isEmpty(text)) return null;
|
||||
|
||||
final List<ForumPost> postItems = new ArrayList<ForumPost>();
|
||||
|
||||
final String[] data = text.split(SEPARATOR);
|
||||
final int size = data.length / 3;
|
||||
for (int i = 0; i < size; i++) {
|
||||
ForumPost post = new ForumPost();
|
||||
|
||||
String titleAuthor = data[i];
|
||||
int breakCharIndex = titleAuthor.indexOf('\n');
|
||||
post.setForumTitle(titleAuthor.substring(0, breakCharIndex));
|
||||
post.setAuthor(titleAuthor.substring(breakCharIndex + 1));
|
||||
post.setDate(data[i + 1]);
|
||||
post.setMessage(data[i + 2]);
|
||||
|
||||
postItems.add(post);
|
||||
}
|
||||
|
||||
return postItems;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
ProgressBar progressBar = new ProgressBar(context);
|
||||
progressBar.setIndeterminate(true);
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setCustomTitle(progressBar);
|
||||
builder.setIcon(android.R.drawable.ic_menu_upload);
|
||||
builder.setMessage("Please, wait...");
|
||||
builder.setCancelable(false);
|
||||
dialog = builder.create();
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<ForumPost> items) {
|
||||
super.onPostExecute(items);
|
||||
listener.onLoadingFinished(items);
|
||||
dialog.dismiss();
|
||||
}
|
||||
|
||||
public interface FinishLoadingListener {
|
||||
void onLoadingFinished(List<ForumPost> items);
|
||||
}
|
||||
}
|
37
src/com/annimon/client/utils/InetUtils.java
Normal file
37
src/com/annimon/client/utils/InetUtils.java
Normal file
@ -0,0 +1,37 @@
|
||||
package com.annimon.client.utils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class InetUtils {
|
||||
|
||||
public static synchronized String getTextFromUri(String urlsite) {
|
||||
StringBuilder text = new StringBuilder();
|
||||
|
||||
BufferedReader reader = null;
|
||||
try {
|
||||
final URL url = new URL(urlsite);
|
||||
reader = new BufferedReader(new InputStreamReader(url.openStream()));
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
text.append(line);
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (IOException ex) { }
|
||||
}
|
||||
}
|
||||
|
||||
return text.toString();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user