ผมได้ศึกษา RssFeed จากเว็บนี้ครับ
http://amitandroid.blogspot.com/2013/02/android-rssfeed-with-async-task-example.html ซึ่งตอนนี้สามารถอ่าน RssFeed มาแสดงบน Android ได้แล้วเหมือนตัวอย่างในเว็บ แต่โค้ดในเว็บมันไม่ได้เขียนให้เปิดลิ้งค์หน้าเว็บจาก RssFeed ที่อ่านมาครับ ผมได้ลองแก้โค้ดในไฟล์ RssReaderActivity.java ให้เป็นแบบนี้ครับ
public class RssReaderActivity extends Activity implements AsyncTaskCompletionListener{
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rss_reader);
listview=(ListView)findViewById(R.id.rssfeed_listview);
if(Utility.determineConnectivity(this)){
new RssFeedAsyncTask(this).execute(Utility.url);
// *** เพิ่มส่วนนี้เข้าไป ***
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
else{
Toast.makeText(this, "No Internet Connection", Toast.LENGTH_SHORT).show();
}
}
แต่พอรันแล้วมันจะเปิดเว็บ
http://www.example.com เลย ไม่แสดง RssFeed ครับ ผมจึงคิดว่าควรจะไปแก้ไขโค้ดในไฟล์ RssReaderListAdapter.java มากกว่า ผมจึงแก้โค้ดในฟังก์ชัน getView() แบบนี้ครับ
public class RssReaderListAdapter extends ArrayAdapter<RssFeedStructure> {
List<RssFeedStructure> imageAndTexts1 = null;
public RssReaderListAdapter(Activity activity,
List<RssFeedStructure> imageAndTexts) {
super(activity, 0, imageAndTexts);
imageAndTexts1 = imageAndTexts;
// Permission StrictMode
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Activity activity = (Activity) getContext();
LayoutInflater inflater = activity.getLayoutInflater();
View rowView = inflater.inflate(R.layout.rssfeedadapter_layout, null);
TextView textView = (TextView) rowView.findViewById(R.id.feed_text);
TextView timeFeedText = (TextView) rowView
.findViewById(R.id.feed_updatetime);
ImageView imageView = (ImageView) rowView.findViewById(R.id.feed_image);
try {
Log.d("rssfeed", "imageAndTexts1.get(position).getImgLink() :: "
+ imageAndTexts1.get(position).getImgLink() + " :: "
+ imageAndTexts1.get(position).getTitle()+ " :: "
+ imageAndTexts1.get(position).getUrl());
textView.setText(imageAndTexts1.get(position).getTitle());
SpannableString content = new SpannableString(imageAndTexts1.get(
position).getPubDate());
content.setSpan(new UnderlineSpan(), 0, 13, 0);
timeFeedText.setText(content);
// โค้ดที่เพิ่มเข้าไป OnClick Item
imageAndTexts1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView, int position, long mylng) {
Toast.makeText(getApplicationContext(), imageAndTexts1.get(position).getUrl(), Toast.LENGTH_SHORT).show();
}
});
if (imageAndTexts1.get(position).getImgLink() != null) {
URL feedImage = new URL(imageAndTexts1.get(position)
.getImgLink().toString());
if (!feedImage.toString().equalsIgnoreCase("null")) {
HttpURLConnection conn = (HttpURLConnection) feedImage
.openConnection();
InputStream is = conn.getInputStream();
imageView.setLayoutParams(new LinearLayout.LayoutParams(200, 200));
Bitmap img = BitmapFactory.decodeStream(is);
imageView.setImageBitmap(img);
} else {
imageView.setBackgroundResource(R.drawable.im);
}
}
} catch (MalformedURLException e) {
} catch (IOException e) {
}
return rowView;
}
แต่มันแสดง error แบบนี้ในโค้ดครับ
The method setOnItemClickListener(new OnItemClickListener(){}) is undefined for the type List<RssFeedStructure>
ไม่ทราบว่าทำยังไงถึงจะเปิดลิ้งค์ของ RssFeed จากข้อความใน ListView ได้ครับ
Android อยากทราบวิธีการอ่าน onItemClick จากคลาสที่ไม่ได้ extends Activity ครับ
public class RssReaderActivity extends Activity implements AsyncTaskCompletionListener{
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rss_reader);
listview=(ListView)findViewById(R.id.rssfeed_listview);
if(Utility.determineConnectivity(this)){
new RssFeedAsyncTask(this).execute(Utility.url);
// *** เพิ่มส่วนนี้เข้าไป ***
String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
else{
Toast.makeText(this, "No Internet Connection", Toast.LENGTH_SHORT).show();
}
}
แต่พอรันแล้วมันจะเปิดเว็บ http://www.example.com เลย ไม่แสดง RssFeed ครับ ผมจึงคิดว่าควรจะไปแก้ไขโค้ดในไฟล์ RssReaderListAdapter.java มากกว่า ผมจึงแก้โค้ดในฟังก์ชัน getView() แบบนี้ครับ
public class RssReaderListAdapter extends ArrayAdapter<RssFeedStructure> {
List<RssFeedStructure> imageAndTexts1 = null;
public RssReaderListAdapter(Activity activity,
List<RssFeedStructure> imageAndTexts) {
super(activity, 0, imageAndTexts);
imageAndTexts1 = imageAndTexts;
// Permission StrictMode
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Activity activity = (Activity) getContext();
LayoutInflater inflater = activity.getLayoutInflater();
View rowView = inflater.inflate(R.layout.rssfeedadapter_layout, null);
TextView textView = (TextView) rowView.findViewById(R.id.feed_text);
TextView timeFeedText = (TextView) rowView
.findViewById(R.id.feed_updatetime);
ImageView imageView = (ImageView) rowView.findViewById(R.id.feed_image);
try {
Log.d("rssfeed", "imageAndTexts1.get(position).getImgLink() :: "
+ imageAndTexts1.get(position).getImgLink() + " :: "
+ imageAndTexts1.get(position).getTitle()+ " :: "
+ imageAndTexts1.get(position).getUrl());
textView.setText(imageAndTexts1.get(position).getTitle());
SpannableString content = new SpannableString(imageAndTexts1.get(
position).getPubDate());
content.setSpan(new UnderlineSpan(), 0, 13, 0);
timeFeedText.setText(content);
// โค้ดที่เพิ่มเข้าไป OnClick Item
imageAndTexts1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView, int position, long mylng) {
Toast.makeText(getApplicationContext(), imageAndTexts1.get(position).getUrl(), Toast.LENGTH_SHORT).show();
}
});
if (imageAndTexts1.get(position).getImgLink() != null) {
URL feedImage = new URL(imageAndTexts1.get(position)
.getImgLink().toString());
if (!feedImage.toString().equalsIgnoreCase("null")) {
HttpURLConnection conn = (HttpURLConnection) feedImage
.openConnection();
InputStream is = conn.getInputStream();
imageView.setLayoutParams(new LinearLayout.LayoutParams(200, 200));
Bitmap img = BitmapFactory.decodeStream(is);
imageView.setImageBitmap(img);
} else {
imageView.setBackgroundResource(R.drawable.im);
}
}
} catch (MalformedURLException e) {
} catch (IOException e) {
}
return rowView;
}
แต่มันแสดง error แบบนี้ในโค้ดครับ
The method setOnItemClickListener(new OnItemClickListener(){}) is undefined for the type List<RssFeedStructure>
ไม่ทราบว่าทำยังไงถึงจะเปิดลิ้งค์ของ RssFeed จากข้อความใน ListView ได้ครับ