无法从列表屏幕转换为详细信息

时间:2015-03-09 21:25:26

标签: android android-layout android-intent

我的应用中有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);
    }
}

0 个答案:

没有答案