将 ListView 和 ArrayAdapter 传递给另一个 class
Pass ListView and ArrayAdpater to another class
我正在尝试实现这个库 https://github.com/ShirwaM/Simplistic-RSS。
该库按照描述的方式运行,但我不喜欢处理提要输出的方式。基本上在主activity中的私有class里面它直接调用了ListView和ArrayAdapter。这意味着如果我想要两个 ListView 显示两个提要,我必须复制整个私有 class。我想要做的是让它接受传递给它的 ArrayAdapater 和 ListView,这样我就可以关闭 class,然后调用它两次,传递相关的提要 URL 和 ListView 以进行输出。
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity
{
private ListView mList;
private ListView lList;
ArrayAdapter<String> adapter;
ArrayAdapter<String> adapterSecond;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.rss_layout);
lList = (ListView) findViewById(R.id.listTwo);
mList = (ListView) findViewById(R.id.listOne);
adapterSecond = new ArrayAdapter<String>(this, R.layout.basic_list_item);
adapter = new ArrayAdapter<String>(this, R.layout.basic_list_item);
new GetRssFeed().execute("http://feeds.arstechnica.com/arstechnica/index");
new GetRssFeedSecond().execute("http://feeds.skynews.com/feeds/rss/home.xml");
}
private class GetRssFeed extends AsyncTask<String, Void, Void>
{
@Override
protected Void doInBackground(String... params)
{
try
{
RssReader rssReader = new RssReader(params[0]);
Integer i = 0;
for (RssItem item : rssReader.getItems())
{
adapter.add(item.getTitle());
i++;
if(i == 7)
{
break;
}
}
} catch (Exception e)
{
Log.v("Error Parsing Data", e + "");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
adapter.notifyDataSetChanged();
mList.setAdapter(adapter);
}
}
private class GetRssFeedSecond extends AsyncTask<String, Void, Void>
{
@Override
protected Void doInBackground(String... params)
{
try
{
RssReader rssReader = new RssReader(params[0]);
Integer i = 0;
for (RssItem item : rssReader.getItems()) {
adapter.add(item.getTitle());
i++;
if (i == 7) {
break;
}
}
} catch (Exception e)
{
Log.v("Error Parsing Data", e + "");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
adapterSecond.notifyDataSetChanged();
lList.setAdapter(adapterSecond);
}
}
}
如您所见,因为 GetRssFeed
是使用 Adapter 和 ListView 硬编码的,根据 Simplistic-RSS 示例代码,我需要创建两个 GetRssFeed
classes 来生成两个不同的 ListView。我想做到这一点,所以我有一个 GetRssFeed
,我可以用相关的 Adapter 和传递给它的 ListView 来调用它。
在 GetRssFeed Class 中,添加接受 2 个参数的构造函数,url 和列表视图,如果要更改适配器,则添加 3 个参数,如下所示。
public GetRssFeed(String feedUrl, ListView listView) {
this.feedUrl = feedUrl;
this.listView = listView;
}
在 GetRssFeed class 中将这 2 个变量定义为实例变量并使用它们。
然后,在 onCreate 中,您可以像下面这样调用,
new GetRssFeed("http://feeds.arstechnica.com/arstechnica/index", listView).execute();
您的单个 AsyncTask 将如下所示,
private class GetRssFeed extends AsyncTask<String, Void, Void>
{
ListView listView;
String url;
ArrayAdapter adapter;
public GetRssFeed(String url, ListView listView, ArrayAdapter adapter) {
this.listView = listView;
this.url = url;
this.adapter = adapter;
}
@Override
protected Void doInBackground(String... params)
{
try
{
Log.d("tag", "nayana url "+url);
RssReader rssReader = new RssReader(params[0]);
Integer i = 0;
for (RssItem item : rssReader.getItems())
{
adapter.add(item.getTitle());
i++;
if(i == 7)
{
break;
}
}
} catch (Exception e)
{
Log.v("Error Parsing Data", e + "");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
adapter.notifyDataSetChanged();
mList.setAdapter(adapter);
}
}
从 onCreate 开始,您调用
new GetRssFeed("http://feeds.arstechnica.com/arstechnica/index", lList, ADAPTER).execute();
new GetRssFeed("http://feeds.skynews.com/feeds/rss/home.xml", mList, adapterSECOND).execute();
我正在尝试实现这个库 https://github.com/ShirwaM/Simplistic-RSS。
该库按照描述的方式运行,但我不喜欢处理提要输出的方式。基本上在主activity中的私有class里面它直接调用了ListView和ArrayAdapter。这意味着如果我想要两个 ListView 显示两个提要,我必须复制整个私有 class。我想要做的是让它接受传递给它的 ArrayAdapater 和 ListView,这样我就可以关闭 class,然后调用它两次,传递相关的提要 URL 和 ListView 以进行输出。
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity
{
private ListView mList;
private ListView lList;
ArrayAdapter<String> adapter;
ArrayAdapter<String> adapterSecond;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.rss_layout);
lList = (ListView) findViewById(R.id.listTwo);
mList = (ListView) findViewById(R.id.listOne);
adapterSecond = new ArrayAdapter<String>(this, R.layout.basic_list_item);
adapter = new ArrayAdapter<String>(this, R.layout.basic_list_item);
new GetRssFeed().execute("http://feeds.arstechnica.com/arstechnica/index");
new GetRssFeedSecond().execute("http://feeds.skynews.com/feeds/rss/home.xml");
}
private class GetRssFeed extends AsyncTask<String, Void, Void>
{
@Override
protected Void doInBackground(String... params)
{
try
{
RssReader rssReader = new RssReader(params[0]);
Integer i = 0;
for (RssItem item : rssReader.getItems())
{
adapter.add(item.getTitle());
i++;
if(i == 7)
{
break;
}
}
} catch (Exception e)
{
Log.v("Error Parsing Data", e + "");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
adapter.notifyDataSetChanged();
mList.setAdapter(adapter);
}
}
private class GetRssFeedSecond extends AsyncTask<String, Void, Void>
{
@Override
protected Void doInBackground(String... params)
{
try
{
RssReader rssReader = new RssReader(params[0]);
Integer i = 0;
for (RssItem item : rssReader.getItems()) {
adapter.add(item.getTitle());
i++;
if (i == 7) {
break;
}
}
} catch (Exception e)
{
Log.v("Error Parsing Data", e + "");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
adapterSecond.notifyDataSetChanged();
lList.setAdapter(adapterSecond);
}
}
}
如您所见,因为 GetRssFeed
是使用 Adapter 和 ListView 硬编码的,根据 Simplistic-RSS 示例代码,我需要创建两个 GetRssFeed
classes 来生成两个不同的 ListView。我想做到这一点,所以我有一个 GetRssFeed
,我可以用相关的 Adapter 和传递给它的 ListView 来调用它。
在 GetRssFeed Class 中,添加接受 2 个参数的构造函数,url 和列表视图,如果要更改适配器,则添加 3 个参数,如下所示。
public GetRssFeed(String feedUrl, ListView listView) {
this.feedUrl = feedUrl;
this.listView = listView;
}
在 GetRssFeed class 中将这 2 个变量定义为实例变量并使用它们。
然后,在 onCreate 中,您可以像下面这样调用,
new GetRssFeed("http://feeds.arstechnica.com/arstechnica/index", listView).execute();
您的单个 AsyncTask 将如下所示,
private class GetRssFeed extends AsyncTask<String, Void, Void>
{
ListView listView;
String url;
ArrayAdapter adapter;
public GetRssFeed(String url, ListView listView, ArrayAdapter adapter) {
this.listView = listView;
this.url = url;
this.adapter = adapter;
}
@Override
protected Void doInBackground(String... params)
{
try
{
Log.d("tag", "nayana url "+url);
RssReader rssReader = new RssReader(params[0]);
Integer i = 0;
for (RssItem item : rssReader.getItems())
{
adapter.add(item.getTitle());
i++;
if(i == 7)
{
break;
}
}
} catch (Exception e)
{
Log.v("Error Parsing Data", e + "");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
adapter.notifyDataSetChanged();
mList.setAdapter(adapter);
}
}
从 onCreate 开始,您调用
new GetRssFeed("http://feeds.arstechnica.com/arstechnica/index", lList, ADAPTER).execute();
new GetRssFeed("http://feeds.skynews.com/feeds/rss/home.xml", mList, adapterSECOND).execute();