理論的には、RSSフィードの1つのサイトからsearchListView
というListViewにRSS見出しを表示するクラスがあります。 ListViewが空の場合、ListViewが空であることをユーザーに知らせるTextViewが表示されます。これは、このアクティビティに移動するたびに発生します。ボタンとEditTextは見出しをフィルタリングするためのものです。ArrayViewを使用してListViewに新しいアクティビティが表示されない
私は別のプロジェクトでこのクラスと全く同じクラスを持っています(このクラスはこのプロジェクトの主なアクティビティです)。
RssItemは、RSSフィード情報を見出しのタイトルと見出しのURLに解析するクラスです。
注:SearchActivityはではなく、主なアクティビティです。
編集:メインアクティビティでコールバックとLoaderManagerを使用して、アイテムをリストビューに表示しています。私はこれらについてあまり知識がありません、そして、彼らは主な活動のために問題を引き起こしているかどうか本当にわかりません。しかし、私は主要な活動からの情報を一切伝えません。
固定:何らかの理由で何もエラーが表示されず、何も表示されませんでした。それからアンドロイドのマニフェストに入って、アプリにインターネットに接続する権限がないことに気付きました。愚かな間違い、見逃しやすい。
<uses-permission android:name="android.permission.INTERNET"/>
SearchActivity.java
public class SearchActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<RssItem>> {
private EditText mEditText;
private Button mButton;
private ArrayAdapter<RssItem> mAdapter;
private ListView mListView ;
// hard wire Rss feed source for the time being
private String mDataSource = "http://feeds.bbci.co.uk/news/uk/rss.xml";
// no search string at the moment
private String mSearchString = "";
private static final int LOADER_ID = 1;
// The callbacks through which we will interact with the LoaderManager.
private LoaderManager.LoaderCallbacks<List<RssItem>> mCallbacks;
private LoaderManager mLoaderManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mButton = (Button) findViewById(R.id.button);
mEditText = (EditText)findViewById(R.id.editTextSearch);
mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
mListView = (ListView)findViewById(R.id.searchListView);
mListView.setAdapter(mAdapter);
TextView emptyText = (TextView)findViewById(R.id.textViewEmpty);
mListView.setEmptyView(emptyText);
// Set list view item click listener
mListView.setOnItemClickListener(new ListListener(this));
// The Activity (which implements the LoaderCallbacks<Cursor>
// interface) is the callbacks object through which we will interact
// with the LoaderManager. The LoaderManager uses this object to
// instantiate the Loader and to notify the client when data is made
// available/unavailable.
mCallbacks = this;
// Initialize the Loader with id '1' and callbacks 'mCallbacks'.
// If the loader doesn't already exist, one is created. Otherwise,
// the already created Loader is reused. In either case, the
// LoaderManager will manage the Loader across the Activity/Fragment
// lifecycle, will receive any new loads once they have completed,
// and will report this new data back to the 'mCallbacks' object.
mLoaderManager = getLoaderManager();
mLoaderManager.initLoader(LOADER_ID, null, mCallbacks);
}
// handler for search button click
public void onClick(View v){
mSearchString = mEditText.getText().toString();
mLoaderManager.restartLoader(LOADER_ID, null, mCallbacks);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public Loader<List<RssItem>> onCreateLoader(int id, Bundle args) {
RssLoader loader = new RssLoader(
this, // context
mDataSource, // URL of Rss feed
mSearchString // search loaded RssItem for match in title
);
return loader;
}
@Override
public void onLoadFinished(Loader<List<RssItem>> loader, List<RssItem> data) {
mAdapter.clear();
mAdapter.addAll(data);
}
@Override
public void onLoaderReset(Loader<List<RssItem>> loader) {
mAdapter.clear();
}
}
ListListener.java
public class ListListener implements OnItemClickListener {
// And a reference to a calling activity
// Calling activity reference
Activity mParent;
/** We will set those references in our constructor.*/
public ListListener(Activity parent) {
mParent = parent;
}
/** Start a browser with url from the rss item.*/
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
// We create an Intent which is going to display data
Intent i = new Intent(Intent.ACTION_VIEW);
// We have to set data for our new Intent;
i.setData(Uri.parse(((RssItem)(parent.getItemAtPosition(pos))).getLink()));
// And start activity with our Intent
mParent.startActivity(i);
}
}
FIXED:何らかのエラーや何も表示されませんでしたが、何らかの理由で何も表示されませんでした。それからアンドロイドのマニフェストに入って、アプリにインターネットに接続する権限がないことに気付きました。愚かな間違い、見逃しやすい。 – Lemoncide
答えを追加し、この質問を閉じるには受け入れ済みとしてマークします。 – Keshav
@Lemoncideあなたが解決したことを知ってうれしいです。これを答えとして追加し、それが受け入れられないように見えるように受け入れます。 –