有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ExpandableListView更新

您好,每次有新信息出现时,我都试图更改我的ExpandableList,为此我想清除()然后重新组合会更容易,问题是它会崩溃。我对这件事的了解还不足以弄明白

编辑:好的,我知道问题来自onActivityResult(),但我该如何解决它呢

主要活动

// Main Activity

package com.thehuntestshadow.laken;

import 安卓.app.Activity;
import 安卓.support.design.widget.FloatingActionButton;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.AdapterView;
import 安卓.widget.Button;
import 安卓.widget.ListAdapter;
import 安卓.widget.ListView;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.Toast;
import 安卓.content.Intent;
import 安卓.widget.ImageButton;
import 安卓.view.View.OnClickListener;
import 安卓.widget.ExpandableListView;
import 安卓.widget.ExpandableListView.OnChildClickListener;
import 安卓.widget.ExpandableListView.OnGroupClickListener;
import 安卓.widget.ExpandableListView.OnGroupCollapseListener;
import 安卓.widget.ExpandableListView.OnGroupExpandListener;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class MainActivity extends AppCompatActivity{
    MyDBHandler dbHandler =new MyDBHandler(this,null,null,1);
    MyDBManager dbManager = new MyDBManager(this,null,null,1);
    ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    List<String> listDataHeader;
    HashMap<String, List<String>> listDataChild;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        expListView = (ExpandableListView) findViewById(R.id.lvExp) ;

        prepareListData();

        listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

        // setting list adapter
        expListView.setAdapter(listAdapter);



        String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday","Friday", "Saturday", "Sunday"};



        expListView.setOnGroupClickListener(new OnGroupClickListener() {

            @Override
            public boolean onGroupClick(ExpandableListView parent, View v,
                                        int groupPosition, long id) {
                // Toast.makeText(getApplicationContext(),
                // "Group Clicked " + listDataHeader.get(groupPosition),
                // Toast.LENGTH_SHORT).show();
                return false;
            }
        });

        // Listview Group expanded listener
        expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

            @Override
            public void onGroupExpand(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Expanded",
                        Toast.LENGTH_SHORT).show();
            }
        });

        // Listview Group collasped listener
        expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

            @Override
            public void onGroupCollapse(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Collapsed",
                        Toast.LENGTH_SHORT).show();

            }
        });

        // Listview on child click listener
        expListView.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                                        int groupPosition, int childPosition, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(
                        getApplicationContext(),
                        listDataHeader.get(groupPosition)
                                + " : "
                                + listDataChild.get(
                                listDataHeader.get(groupPosition)).get(
                                childPosition), Toast.LENGTH_SHORT)
                        .show();
                return false;
            }
        });






    }
    private void prepareListData() {
        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();

        int[] x = new int[10001];
        x = dbManager.get_result(1);

        // Adding child data
        listDataHeader.add("Monday");
        listDataHeader.add("Tuesday");
        listDataHeader.add("Wednesday");
        listDataHeader.add("Thursday");
        listDataHeader.add("Friday");
        listDataHeader.add("Saturday");
        listDataHeader.add("Sunday");

        String meow;



        // Adding child data
        List<String> monday = new ArrayList<String>();

        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);monday.add(meow);}
        x = dbManager.get_result(2);
        List<String> tuesday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);tuesday.add(meow);}

        x = dbManager.get_result(3);
        List<String> wednsday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);wednsday.add(meow);}


        x = dbManager.get_result(4);
        List<String> thursday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);thursday.add(meow);}

        x = dbManager.get_result(5);
        List<String> friday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);friday.add(meow);}

        x = dbManager.get_result(6);
        List<String> saturday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);saturday.add(meow);}
        x = dbManager.get_result(6);
        List<String> sunday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);sunday.add(meow);}

        listDataChild.put(listDataHeader.get(0), monday); // Header, Child data
        listDataChild.put(listDataHeader.get(1), tuesday);
        listDataChild.put(listDataHeader.get(2), wednsday);
        listDataChild.put(listDataHeader.get(3),thursday);
        listDataChild.put(listDataHeader.get(4),friday);
        listDataChild.put(listDataHeader.get(5),saturday);
        listDataChild.put(listDataHeader.get(6),sunday);

    }



    public void OnClick(View view) {
        Intent i = new Intent(this, Add_Activity.class);
        startActivityForResult(i, 1);
    }



    private void Renew() {
        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();

        int[] x = new int[10001];
        x = dbManager.get_result(1);

        // Adding child data
        listDataHeader.add("Monday");
        listDataHeader.add("Tuesday");
        listDataHeader.add("Wednesday");
        listDataHeader.add("Thursday");
        listDataHeader.add("Friday");
        listDataHeader.add("Saturday");
        listDataHeader.add("Sunday");

        String meow;



        // Adding child data
        List<String> monday = new ArrayList<String>();

        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);monday.add(meow);}
        x = dbManager.get_result(2);
        List<String> tuesday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);tuesday.add(meow);}

        x = dbManager.get_result(3);
        List<String> wednsday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);wednsday.add(meow);}


        x = dbManager.get_result(4);
        List<String> thursday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);thursday.add(meow);}

        x = dbManager.get_result(5);
        List<String> friday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);friday.add(meow);}

        x = dbManager.get_result(6);
        List<String> saturday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);saturday.add(meow);}
        x = dbManager.get_result(6);
        List<String> sunday = new ArrayList<String>();
        for (int i =0;i<x[10000];i++)
            if(x[i]==1){meow=dbHandler.say_name(i+1);sunday.add(meow);}

        listDataChild.put(listDataHeader.get(0), monday); // Header, Child data
        listDataChild.put(listDataHeader.get(1), tuesday);
        listDataChild.put(listDataHeader.get(2), wednsday);
        listDataChild.put(listDataHeader.get(3),thursday);
        listDataChild.put(listDataHeader.get(4),friday);
        listDataChild.put(listDataHeader.get(5),saturday);
        listDataChild.put(listDataHeader.get(6),sunday);

    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent meow) {

        if (requestCode == 1) {
            if(resultCode == Activity.RESULT_OK){


                Data data = new Data ();
                data.set_description(meow.getStringExtra("description"));
                data.set_activityname(meow.getStringExtra("name"));
                dbHandler.addProducts(data);
                Days days1 = new Days();
                int [] array = new int[7];
                array = meow.getIntArrayExtra("array");
                days1.set_monday(array[0]);
                days1.set_tuesday(array[1]);
                days1.set_wednesday(array[2]);
                days1.set_thursday(array[3]);
                days1.set_friday(array[4]);
                days1.set_saturday(array[5]);
                days1.set_sunday(array[6]);
                dbManager.addActivity(days1);
                listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
                listAdapter.remove_shit();expListView.notifyAll();

                prepareListData();
                expListView.notifyAll();

                }
                if (resultCode == Activity.RESULT_CANCELED) {
                    //Write your code if there's no result
                }
            }
        }//onActivityResult


}

ExpandableListAdapter

package com.thehuntestshadow.laken;

/**
 * Created by User1 on 10/23/2016.
 */

import java.util.HashMap;
import java.util.List;

import 安卓.content.Context;
import 安卓.graphics.Typeface;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.BaseExpandableListAdapter;
import 安卓.widget.TextView;

public class ExpandableListAdapter extends BaseExpandableListAdapter {

    private Context _context;
    private List<String> _listDataHeader; // header titles
    // child data in format of header title, child title
    private HashMap<String, List<String>> _listDataChild;

    public ExpandableListAdapter(Context context, List<String> listDataHeader,
                                 HashMap<String, List<String>> listChildData) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
    }

    @Override
    public Object getChild(int groupPosition, int childPosititon) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .get(childPosititon);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {

        final String childText = (String) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_item, null);
        }

        TextView txtListChild = (TextView) convertView
                .findViewById(R.id.lblListItem);

        txtListChild.setText(childText);
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .size();
    }



    @Override
    public Object getGroup(int groupPosition) {
        return this._listDataHeader.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return this._listDataHeader.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
        String headerTitle = (String) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_group, null);
        }

        TextView lblListHeader = (TextView) convertView
                .findViewById(R.id.lblListHeader);
        lblListHeader.setTypeface(null, Typeface.BOLD);
        lblListHeader.setText(headerTitle);

        return convertView;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }


    public void remove_shit ()
    {
        _listDataChild.clear();

    }


}

事件日志

    11/06 11:24:33: Launching app
    $ adb push /Users/TheHuntestShadow/Desktop/Alpha/app/build/outputs/apk/app-debug.apk /data/local/tmp/com.thehuntestshadow.laken
    $ adb shell pm install -r "/data/local/tmp/com.thehuntestshadow.laken"
        pkg: /data/local/tmp/com.thehuntestshadow.laken
    Success


    $ adb shell am start -n "com.thehuntestshadow.laken/com.thehuntestshadow.laken.MainActivity" -a 安卓.intent.action.MAIN -c 安卓.intent.category.LAUNCHER
    Client not ready yet..Waiting for process to come online
    Connected to process 13316 on device samsung-nexus_10-R32D100YVGD
    Waiting for process to come online
    Waiting for process to come online
    Waiting for process to come online
    Application terminated.

### LogCat ###

--------- beginning of crash
11-06 11:32:38.972 13676-13676/? E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.thehuntestshadow.laken, PID: 13676
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { cmp=com.thehuntestshadow.laken/.MainActivity (has extras) }} to activity {com.thehuntestshadow.laken/com.thehuntestshadow.laken.MainActivity}: java.lang.IllegalMonitorStateException: object not locked by thread before notify()
        at 安卓.app.ActivityThread.deliverResults(ActivityThread.java:3574)
        at 安卓.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
        at 安卓.app.ActivityThread.access$1300(ActivityThread.java:151)
        at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
        at 安卓.os.Handler.dispatchMessage(Handler.java:102)
        at 安卓.os.Looper.loop(Looper.java:135)
        at 安卓.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    Caused by: java.lang.IllegalMonitorStateException: object not locked by thread before notify()
        at java.lang.Object.notifyAll(Native Method)
        at com.thehuntestshadow.laken.MainActivity.onActivityResult(MainActivity.java:283)
        at 安卓.app.Activity.dispatchActivityResult(Activity.java:6192)
        at 安卓.app.ActivityThread.deliverResults(ActivityThread.java:3570)
        at 安卓.app.ActivityThread.handleSendResult(ActivityThread.java:3617) 
        at 安卓.app.ActivityThread.access$1300(ActivityThread.java:151) 
        at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1352) 
        at 安卓.os.Handler.dispatchMessage(Handler.java:102) 
        at 安卓.os.Looper.loop(Looper.java:135) 
        at 安卓.app.ActivityThread.main(ActivityThread.java:5254) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
        at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
11-06 11:32:38.975 412-772/? W/ActivityManager:   Force finishing activity 1 com.thehuntestshadow.laken/.MainActivity
11-06 11:32:39.028 412-15206/? I/OpenGLRenderer: Initialized EGL, version 1.4
11-06 11:32:39.032 412-15206/? D/mali_winsys: new_window_surface returns 0x3000
11-06 11:32:39.063 412-15206/? D/mali_winsys: new_window_surface returns 0x3000
11-06 11:32:39.483 412-433/? W/ActivityManager: Activity pause timeout for ActivityRecord{2aaea51a u0 com.thehuntestshadow.laken/.MainActivity t420 f}
11-06 11:32:39.546 12963-12980/? D/mali_winsys: new_window_surface returns 0x3000
11-06 11:32:40.497 523-523/? W/ResourceType: No package identifier when getting value for resource number 0x00000000
11-06 11:32:40.498 523-523/? W/PackageManager: Failure retrieving resources for com.安卓.settings: Resource ID #0x0
11-06 11:32:42.486 13676-13676/? I/Process: Sending signal. PID: 13676 SIG: 9
11-06 11:32:42.552 412-821/? I/WindowState: WIN DEATH: Window{1f76342a u0 com.thehuntestshadow.laken/com.thehuntestshadow.laken.Add_Activity}
11-06 11:32:42.558 412-2395/? I/WindowState: WIN DEATH: Window{262b75b3 u0 com.thehuntestshadow.laken/com.thehuntestshadow.laken.MainActivity}
11-06 11:32:42.620 412-425/? I/ActivityManager: Process com.thehuntestshadow.laken (pid 13676) has died
11-06 11:32:47.760 26617-27417/? I/ClearcutLoggerManager: flushAndDisconnect()

共 (0) 个答案