我的应用中有3个列表视图和3个详细视图。所有三个列表视图似乎都运行良好。我从列表到细节屏幕的第一次转换工作正常。但我的第二次转换仍然失败 - 我的应用程序只返回到列表视图,调试器中似乎没有任何内容。
以下是列表活动文件:
package com.scoular;
import android.app.Activity;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsoluteLayout;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TableLayout;
import android.widget.TextView;
import android.view.View.OnClickListener;
import com.scoular.database.Contact;
import com.scoular.utils.ListUtils;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class ContactsListActivity extends MainActivity implements OnClickListener {
Map<String, Integer>mapIndex;
//LinkedHashMap<String, Integer> mapIndex;
ListView contactsListView;
private ArrayList<Contact> contactList = new ArrayList<Contact>();
private ArrayList<Contact> filteredContacts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, R.layout.activity_contacts_list);
contactList = ListUtils.getContactsListOrPopulateFromDatabase(this,contactDbHelper);
filteredContacts = new ArrayList<Contact>(contactList.size());
filteredContacts = (ArrayList<Contact>)contactList.clone();
contactsListView = (ListView) findViewById(R.id.list_contacts);
contactsListView.setAdapter(new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, contactList));
addItemClickListener();
getIndexList();
displayIndex();
}
private void addItemClickListener() {
final Activity activity = this;
contactsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(activity, ContactDetailsActivity.class);
Bundle b = getIntent().getExtras();
if (b != null) {
intent.putExtras(getIntent().getExtras());
} else {
b = new Bundle();
}
Contact contact = filteredContacts.get(position);
b.putParcelable("CONTACT", contact);
intent.putExtras(b);
startActivity(intent);
}
});
}
private void getIndexList() {
mapIndex = new LinkedHashMap<String, Integer>();
for (int i = 0; i < contactList.size(); i++) {
Contact contact = contactList.get(i);
String companyName = contact.getCompanyName();
String index = companyName.substring(0, 1);
if (mapIndex.get(index) == null)
mapIndex.put(index, i);
}
}
private void displayIndex() {
LinearLayout indexLayout = (LinearLayout) findViewById(R.id.side_index);
TextView textView;
List<String> indexList = new ArrayList<String>(mapIndex.keySet());
for (String index : indexList) {
textView = (TextView) getLayoutInflater().inflate(
R.layout.side_index_item, null);
textView.setTextSize(getResources().getDimension(R.dimen.text_size));
textView.setLayoutParams(new TableLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT, AbsoluteLayout.LayoutParams.WRAP_CONTENT, 1f));
textView.setTextColor(Color.parseColor("#44697E"));
textView.setPadding(textView.getPaddingLeft(), 13, textView.getPaddingRight(), 0);
textView.setText(index);
textView.setOnClickListener(this);
indexLayout.addView(textView);
}
}
public void onClick(View view) {
TextView selectedIndex = (TextView) view;
contactsListView.setSelection(mapIndex.get(selectedIndex.getText()));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_contacts_list, menu);
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem menuItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
performSearch(s);
return false;
}
@Override
public boolean onQueryTextChange(String s) {
performSearch(s);
return false;
}
});
return true;
}
private void performSearch(String query) {
filteredContacts = new ArrayList<Contact>();
query = query.trim();
ListAdapter listAdapter = null;
for (Contact contact : contactList) {
if (StringUtils.containsIgnoreCase(contact.getCompanyName(), query))
{
filteredContacts.add(contact);
}
}
if (query.isEmpty()) {
listAdapter = new ArrayAdapter<Contact>(this,
android.R.layout.simple_list_item_1, contactList);
LinearLayout sideIndex = (LinearLayout) findViewById(R.id.side_index);
sideIndex.setVisibility(View.VISIBLE);
ListView contactListView = (ListView) findViewById(R.id.list_contacts);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, contactListView.getHeight(), 1);
contactListView.setLayoutParams(layoutParams);
} else {
LinearLayout sideIndex = (LinearLayout) findViewById(R.id.side_index);
sideIndex.setVisibility(View.INVISIBLE);
LinearLayout parentLayout = (LinearLayout)sideIndex.getParent();
ListView contactListView = (ListView) findViewById(R.id.list_contacts);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(parentLayout.getWidth(), contactListView.getHeight());
contactListView.setLayoutParams(layoutParams);
listAdapter = new ArrayAdapter<Contact>(this,
android.R.layout.simple_list_item_1, filteredContacts);
}
contactsListView.setAdapter(listAdapter);
}
}
以下是详细活动文件(存根):
package com.scoular;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import com.scoular.database.Contact;
public class ContactDetailsActivity extends MainActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact_details);
Bundle b = getIntent().getExtras();
Contact contact = b.getParcelable("CONTACT");
}
}
这是布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.scoular.InfoActivity">
<ScrollView
android:id="@+id/scroll_view"
android:layout_width="fill_parent"
android:fillViewport="true"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@color/white"
tools:context="com.scoular.EmployeeDetailsActivity">
<com.scoular.custom_widgets.RobotoTextView
android:id="@+id/employee_name_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:textSize="22dp"
android:paddingLeft="16dp"/>
<com.scoular.custom_widgets.RobotoTextView
android:id="@+id/employee_location_label"
android:layout_width="fill_parent"
android:background="@color/white"
android:layout_height="wrap_content"
android:layout_below="@id/employee_name_label"
android:paddingLeft="16dp"
android:paddingBottom="32dp"
android:textSize="16dp"/>
<com.scoular.custom_widgets.RobotoTextView
android:id="@+id/phone_label"
android:layout_below="@id/employee_location_label"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:background="@color/scoular_pantone_5405"
android:textColor="@color/white"
android:text="PHONE"
android:paddingLeft="16dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"/>
<LinearLayout android:id="@+id/office_phone_layout"
android:layout_width="fill_parent"
android:paddingTop="16dp"
android:paddingLeft="16dp"
android:background="@color/white"
android:layout_height="wrap_content"
android:layout_below="@id/phone_label">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.scoular.custom_widgets.RobotoTextView
android:background="@color/white"
android:id="@+id/office_phone_display"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.scoular.custom_widgets.RobotoTextView
android:background="@color/white"
android:id="@+id/office_phone_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OFFICE"/>
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/white"
android:layout_weight="1"/>
<ImageButton
android:id="@+id/office_phone_button"
android:layout_width="wrap_content"
android:layout_gravity="right"
android:layout_height="wrap_content"
android:onClick="callOffice"
android:background="@color/white"
android:paddingRight="8dp"
android:src="@drawable/ic_action_phone_start" />
</LinearLayout>
<LinearLayout android:id="@+id/mobile_phone_layout"
android:layout_width="fill_parent"
android:paddingTop="16dp"
android:paddingLeft="16dp"
android:background="@color/white"
android:paddingBottom="16dp"
android:layout_height="wrap_content"
android:layout_below="@id/office_phone_layout">
<LinearLayout
android:background="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.scoular.custom_widgets.RobotoTextView
android:background="@color/white"
android:id="@+id/mobile_phone_display"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.scoular.custom_widgets.RobotoTextView
android:background="@color/white"
android:id="@+id/mobile_phone_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="MOBILE"/>
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<ImageButton
android:id="@+id/mobile_phone_button"
android:layout_width="wrap_content"
android:layout_gravity="right"
android:layout_height="wrap_content"
android:onClick="callMobile"
android:background="@null"
android:paddingRight="8dp"
android:src="@drawable/ic_action_phone_start" />
<ImageButton
android:id="@+id/mobile_text_button"
android:layout_width="wrap_content"
android:layout_gravity="right"
android:layout_height="wrap_content"
android:onClick="textMobile"
android:background="@null"
android:paddingRight="8dp"
android:src="@drawable/ic_action_dialog" />
</LinearLayout>
<com.scoular.custom_widgets.RobotoTextView
android:id="@+id/email_label"
android:layout_below="@id/mobile_phone_layout"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="EMAIL"
android:paddingLeft="16dp"
android:textColor="@color/white"
android:background="@color/scoular_pantone_5405"
android:paddingTop="4dp"
android:paddingBottom="4dp"/>
<LinearLayout android:id="@+id/email_layout"
android:layout_width="fill_parent"
android:background="@color/white"
android:paddingTop="4dp"
android:paddingLeft="16dp"
android:layout_height="wrap_content"
android:layout_below="@id/email_label">
<com.scoular.custom_widgets.RobotoTextView
android:id="@+id/email_display"
android:layout_width="wrap_content"
android:background="@null"
android:layout_height="fill_parent"
android:gravity="center_vertical"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<ImageButton
android:id="@+id/email_button"
android:layout_width="wrap_content"
android:layout_gravity="right"
android:layout_height="wrap_content"
android:onClick="sendEmail"
android:background="@null"
android:paddingRight="8dp"
android:src="@drawable/ic_action_mail" />
</LinearLayout>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
当我触摸联系人项目时,我在日志中看到的唯一内容是:
03-09 17:15:23.899 21753-21753/com.scoular I/dalvikvm﹕ Could not find method android.view.ViewGroup.onNestedScrollAccepted, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onNestedScrollAccepted
03-09 17:15:23.899 21753-21753/com.scoular W/dalvikvm﹕ VFY: unable to resolve virtual method 11778: Landroid/view/ViewGroup;.onNestedScrollAccepted (Landroid/view/View;Landroid/view/View;I)V
03-09 17:15:23.899 21753-21753/com.scoular D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
03-09 17:15:23.899 21753-21753/com.scoular I/dalvikvm﹕ Could not find method android.view.ViewGroup.onStopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onStopNestedScroll
03-09 17:15:23.899 21753-21753/com.scoular W/dalvikvm﹕ VFY: unable to resolve virtual method 11784: Landroid/view/ViewGroup;.onStopNestedScroll (Landroid/view/View;)V
03-09 17:15:23.899 21753-21753/com.scoular D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
03-09 17:15:23.899 21753-21753/com.scoular I/dalvikvm﹕ Could not find method android.support.v7.internal.widget.ActionBarOverlayLayout.stopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.setHideOnContentScrollEnabled
03-09 17:15:23.899 21753-21753/com.scoular W/dalvikvm﹕ VFY: unable to resolve virtual method 9428: Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll ()V
03-09 17:15:23.899 21753-21753/com.scoular D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000e
03-09 17:15:23.899 21753-21753/com.scoular I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
03-09 17:15:23.899 21753-21753/com.scoular W/dalvikvm﹕ VFY: unable to resolve virtual method 553: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
03-09 17:15:23.899 21753-21753/com.scoular D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
03-09 17:15:23.899 21753-21753/com.scoular I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
03-09 17:15:23.899 21753-21753/com.scoular W/dalvikvm﹕ VFY: unable to resolve virtual method 575: Landroid/content/res/TypedArray;.getType (I)I
03-09 17:15:23.909 21753-21753/com.scoular D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
03-09 17:15:23.959 21753-21753/com.scoular D/Activity﹕ #1 setTransGradationModeColor false
03-09 17:15:23.999 21753-21753/com.scoular I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:381>: EGL 1.4 QUALCOMM build: (CL3869936)
但我在列表中得到了它。
任何帮助都会非常适合。
这是我的主要内容:
package com.scoular;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.scoular.database.ContactDbHelper;
import com.scoular.database.EmployeeDbHelper;
import com.scoular.database.LocationDbHelper;
import static com.scoular.utils.ScoularUtils.isIntentSafe;
import java.util.List;
import static com.scoular.utils.ScoularUtils.getPreference;
public class MainActivity extends ActionBarActivity {
EmployeeDbHelper employeeDbHelper;
LocationDbHelper locationDbHelper;
ContactDbHelper contactDbHelper;
private PendingIntent pendingIntent;
private BroadcastReceiver broadcastReceiver;
private AlarmManager alarmManager;
protected void onCreate(Bundle savedInstanceState, int layoutId) {
super.onCreate(savedInstanceState);
setContentView(layoutId);
employeeDbHelper = new EmployeeDbHelper(this);
locationDbHelper = new LocationDbHelper(this);
contactDbHelper = new ContactDbHelper(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
onCreate(savedInstanceState, R.layout.activity_main);
String hasCustomers = getPreference(this, R.string.has_customers);
if(!hasCustomers.equals("Yes")) {
TextView textView = (TextView)findViewById(R.id.contacts_label);
textView.setVisibility(View.INVISIBLE);
Button button = (Button) findViewById(R.id.contacts_by_company_name);
button.setVisibility(View.INVISIBLE);
button = (Button) findViewById(R.id.contacts_by_contact_name);
button.setVisibility(View.INVISIBLE);
}
String loggedIn = getPreference(this, R.string.logged_in);
if(!loggedIn.equals("true")) {
TextView textView = (TextView)findViewById(R.id.approvals_label);
textView.setVisibility(View.INVISIBLE);
Button button = (Button) findViewById(R.id.project_expenditures);
button.setVisibility(View.INVISIBLE);
button = (Button) findViewById(R.id.expenses);
button.setVisibility(View.INVISIBLE);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.home_button:
startActivity(this, MainActivity.class);
return true;
case R.id.info_button:
startActivity(this, InfoActivity.class);
return true;
case R.id.settings_button:
startActivity(this, SettingsActivity.class);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void startActivity(Activity activity, Class clazz) {
Intent intent = new Intent(activity, clazz);
if(getIntent().getExtras() != null) {
intent.putExtras(getIntent().getExtras());
}
startActivity(intent);
}
@Override
public void startActivity(Intent intent) {
if(isIntentSafe(intent, this)) {
super.startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "Unable to find app that is compatible with intent ", Toast.LENGTH_LONG).show();
}
}
public boolean hasPhoneAbility() {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:5551231234"));
List<ResolveInfo> callAppsList =
getApplicationContext().getPackageManager().queryIntentActivities(callIntent, 0);
int phoneNumber = ((TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE)).getPhoneType();
if(callAppsList.size() == 1 && callAppsList.get(0).activityInfo.applicationInfo.className.contains("com.android.phone.PhoneApp") && phoneNumber == TelephonyManager.PHONE_TYPE_NONE) {
return false;
}
return (!callAppsList.isEmpty() || (((TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE)).getPhoneType()
== TelephonyManager.PHONE_TYPE_NONE) || (((TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number()
== null)) && isIntentSafe(callIntent, this);
}
public void listEmployees(View view) {
startActivity(this, EmployeesListActivity.class);
}
public void listLocations(View view) {
startActivity(this, LocationsListActivity.class);
}
public void showProjectExpenditures(View view) {
startActivity(this, ProjectExpendituresActivity.class);
}
public void showExpenses(View view) {
startActivity(this, ExpensesActivity.class);
}
public void listContactsByCompanyName(View view) {
startActivity(this, ContactsListActivity.class);
}
public void listContactsByContactName(View view) {
startActivity(this, ContactsListActivity.class);
}
}