Google のソース コードを使用して、最近の通話の類似アクティビティを作成しています。ダイヤラー、最近の通話、連絡先のカスタム ビューを備えたアプリを作成する必要があるため、最初のステップはカスタム ダイヤラーを作成することでした。次に、通話履歴を作成しましたが、外観が十分ではなかったため、Google の連絡先アプリ パッケージを取得して、RecentCallsActivity を取得し、アプリに適応させました。
現在、アプリはほぼ動作していますが、解決方法がわからないエラーがいくつかあります。これは、このエラーを解決しようとする最も関連性の高い部分を含むコードの抜粋です。
public class RecentCallsListActivity extends ListActivity implements View.OnCreateContextMenuListener {
...
RecentCallsAdapter mAdapter;
....
final class RecentCallsAdapter implements ViewTreeObserver.OnPreDrawListener, View.OnClickListener, Runnable {
...
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
mAdapter = new RecentCallsAdapter();
getListView().setOnCreateContextMenuListener(this);
setListAdapter(mAdapter); // The method SetListAdapter (ListAdapter) in the type ListActivity is not aplicable for the arguments (RecentCallsListActivity.RecentCallsAdapter)
mQueryHandler = new QueryHandler(this);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfoIn) {
AdapterView.AdapterContextMenuInfo menuInfo;
Cursor cursor = mAdapter.getItem(menuInfo.position); //The method getItem(int) is undefined for the type RecentCallsListActivity.RecentCallsAdapter
...
これらは 2 つの主要なエラーです。元のファイルでは、mAdapter は同じ方法で宣言されており、これらのエラーはありません。また、他に 2 つのエラーがあります。
mAdapter.isGroupHeader(menuInfo.position)
mAdapter.getGroupSize(menuInfo.position)
なんらかの宣言に違いないのですが、その理由や何をすべきかわかりません。
アップデート
Eugene's answer のおかげで、クラスをアダプターに拡張することを解決しました。しかし、いくつかのドローアブルを実装するときに、次の問題が発生しました。私は android.internal.R を参照できないことを知っているので、これに対する解決策を見つけることです:
protected void bindGroupView(View view, Context context, Cursor cursor, int groupSize,
boolean expanded) {
final RecentCallsListItemViews views = (RecentCallsListItemViews) view.getTag();
int groupIndicator = expanded
? com.android.internal.R.drawable.expander_ic_maximized //CANNOT BE RESOLVED
: com.android.internal.R.drawable.expander_ic_minimized; //CANNOT BE RESOLVED
views.groupIndicator.setImageResource(groupIndicator);
views.groupSize.setText("(" + groupSize + ")");
bindView(context, view, cursor);
}