私はSQLデータベースを構築し、API 11より前のAndroidで使用できるようにsearchviewウィジェットを実装しました
調査をしようとすると、アプリケーションが閉じて、次のエラーとその他のメッセージが表示されます。
エラー
08-19 15:15:25.560: E/dalvikvm(6838): Could not find class 'android.support.v7.widget.SearchView$5', referenced from method android.support.v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11
08-19 15:15:25.560: I/dalvikvm(6838): Failed resolving Landroid/support/v7/widget/SearchView$5; interface 814 'Landroid/view/View$OnLayoutChangeListener;'
08-19 15:15:25.560: W/dalvikvm(6838): Link of class 'Landroid/support/v7/widget/SearchView$5;' failed
08-19 15:15:25.560: D/dalvikvm(6838): VFY: replacing opcode 0x22 at 0x0002
08-19 15:15:25.560: D/dalvikvm(6838): VFY: dead code 0x0004-000a in Landroid/support/v7/widget/SearchView;.addOnLayoutChangeListenerToDropDownAnchorSDK11 ()V
私のコードに何か問題があるのか どうかはわかりません。誰か私を助けてくれる人はいますか?ありがとうございました
エラーはここだと思います
import android.app.ListActivity;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListView;
public class SearchableActivity extends ListActivity{
DatabaseTable db = new DatabaseTable(this);
final Context context=this;
ListView list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
list=(ListView)findViewById(android.R.id.list);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(getIntent());
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
Cursor c = db.getWordMatches(query, null);
c.moveToFirst();
}
}
}
android.support.v7.widget.Searchview をインポートしようとしましたが、それは使用されていないと表示され、エラーが消えません。このプロジェクトでは、SearchWidget を含む MainActivity.Java、データを含む DatabaseTable.java、definitions.txt、Search.xml および SearchActivity.Java (以下のコード) を作成しました。マニフェスト内の MainActivity と SearchActivity の meta タグは、ここにすべてのページのコードを挿入するのに役立つかどうかわかりません...もうどうしたらいいのかわかりません!!
はい、これが私の主な活動のコードです
import android.os.Bundle;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.SearchView;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends ActionBarActivity implements OnClickListener{
ActionBar actionBar;
Button a;
Button b;
Button c;
Button d;
Button e;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getSupportActionBar();
actionBar.setTitle("Trial");
initialiseOnClick();
a.setOnClickListener(this);
b.setOnClickListener(this);
c.setOnClickListener(this);
d.setOnClickListener(this);
e.setOnClickListener(this);
}
//START SEARCHVIEWWIDGET
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
// Configure the search info and add any event listeners
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(true);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
onSearchRequested();
return true;
default:
return false;
}
}
// END SEARCHVIEWWIDGET
private void initialiseOnClick() {
// TODO Auto-generated method stub
a = (Button) findViewById (R.id.button_a);
b = (Button) findViewById (R.id.button_b);
c = (Button) findViewById (R.id.button_c);
d = (Button) findViewById (R.id.button_d);
e = (Button) findViewById (R.id.button_e);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.button_a:
Intent a = new Intent(MainActivity.this, EuropeActivity.class);
startActivity(a);
break;
case R.id.button_b:
Intent b = new Intent(MainActivity.this, AmericasActivity.class);
startActivity(b);
break;
case R.id.button_c:
Intent c = new Intent(MainActivity.this, AsiaActivity.class);
startActivity(c);
break;
case R.id.button_d:
Intent d = new Intent(MainActivity.this, OceaniaActivity.class);
startActivity(d);
break;
case R.id.button_e:
Intent e = new Intent(MainActivity.this, AfricaActivity.class);
startActivity(e);
break;
}
}
}