简体   繁体   中英

How do i get a specific text file from assets when a click a child in expandable listview

I am trying to create a hymnal app. I have been able to make clicks on child to open a new activity with only textview. The problem is that all the children get and open the same text file from asset. The code worked for listview but I don't know how to use for expandable listviews.

My Mainactivity code

public class ClassActivity extends AppCompatActivity {

private ExpandableListView listView;
private MyExpandableAdapter listAdapter;
private List<String> ListDataHeader;
private HashMap<String,List<String>> listHash;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_class);


    listView = (ExpandableListView) findViewById(R.id.list);
    initData();
    listAdapter = new MyExpandableAdapter(this, ListDataHeader, listHash);
    listView.setAdapter(listAdapter);

    listView.setDividerHeight(2);
    listView.setGroupIndicator(null);
    listView.setClickable(true);

    listView.setOnChildClickListener(new  ExpandableListView.OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView arg0,
                                    View arg1, int arg2, int arg3, long arg4) {
            Intent myIntent = new Intent(ClassActivity.this, ClassListDetail.class);
            ClassActivity.this.startActivity(myIntent);
            return false;
        }
    });

}

private void initData() {
    ListDataHeader = new ArrayList <>();
    listHash = new HashMap <>();


    ListDataHeader.add("PROCESSIONAL HYMN 1");
    ListDataHeader.add("LIGHTING THE CANDLES 2");
    ListDataHeader.add("KNEELING DOWN 3 - 4");
    ListDataHeader.add("FORGIVENESS AND REPENTANCE 5 - 50");
    ListDataHeader.add("SERVICES 51 - 125");
    ListDataHeader.add("SONGS FOR PALM SUNDAY 126 - 150");
    ListDataHeader.add("MERCY AND DURING PASSION WEEK 151 - 175");
    ListDataHeader.add("EASTER DAY 176 - 200");
    ListDataHeader.add("GOD'S GLORY AND ASCENSION DAY 201 - 225");
    ListDataHeader.add("HOLY SPIRIT 226 - 250");
    ListDataHeader.add("SPIRITUAL POWER 251 - 275");
    ListDataHeader.add("GOOD NEWS 276 - 300");
    ListDataHeader.add("PRAISE 301 - 325");
    ListDataHeader.add("GLORY 326 - 350");
    ListDataHeader.add("JOY 351 - 375");
    ListDataHeader.add("THANKSGIVING 376 - 400");
    ListDataHeader.add("BLESSING 401 - 425");
    ListDataHeader.add("HARVEST 426 - 450");
    ListDataHeader.add("VICTORY 451 - 485");
    ListDataHeader.add("HEALING 486 - 500");
    ListDataHeader.add("BAPTISM 501 - 520");
    ListDataHeader.add("FAITH 521 - 550");
    ListDataHeader.add("JUDGEMENT 551 - 570");
    ListDataHeader.add("THE COMING OF CHRIST 571 - 600");
    ListDataHeader.add("GOD'S WORK 601 - 630");


    List<String> A = new ArrayList<>();
    A.add("Core");
    A.add("Games");
    A.add("Core");
    A.add("Games");
    A.add("Core");
    A.add("Games");
    A.add("Core");
    A.add("Games");

    List<String> B = new ArrayList<>();
    B.add("Apache");
    B.add("Applet");
    B.add("AspectJ");
    B.add("Beans");
    B.add("Crypto");

    // Desktop Java
    List<String> C = new ArrayList<>();
    C.add("Accessibility");
    C.add("AWT");
    C.add("ImageIO");
    C.add("Print");

    // Enterprise Java
    List<String> D = new ArrayList<>();
    D.add("EJB3");
    D.add("GWT");
    D.add("Hibernate");
    D.add("JSP");

    // Core Java
    List<String> E = new ArrayList<>();
    E.add("Apache");
    E.add("Applet");
    E.add("AspectJ");
    E.add("Beans");
    E.add("Crypto");


    // Desktop Java
    List<String> F = new ArrayList<>();
    F.add("Accessibility");
    F.add("AWT");
    F.add("ImageIO");
    F.add("Print");


    // Enterprise Java
    List<String> G = new ArrayList<>();
    G.add("EJB3");
    G.add("GWT");
    G.add("Hibernate");
    G.add("JSP");

    // Core Java
    List<String> H = new ArrayList<>();
    H.add("Apache");
    H.add("Applet");
    H.add("AspectJ");
    H.add("Beans");
    H.add("Crypto");


    // Desktop Java
    List<String> I = new ArrayList<>();
    I.add("Accessibility");
    I.add("AWT");
    I.add("ImageIO");
    I.add("Print");


    // Enterprise Java
    List<String> J = new ArrayList<>();
    J.add("EJB3");
    J.add("GWT");
    J.add("Hibernate");
    J.add("JSP");

    // Core Java
    List<String> K = new ArrayList<>();
    K.add("Apache");
    K.add("Applet");
    K.add("AspectJ");
    K.add("Beans");
    K.add("Crypto");
    K.add("AspectJ");
    K.add("Beans");
    K.add("Crypto");


    // Desktop Java
    List<String> L = new ArrayList<>();
    L.add("Accessibility");
    L.add("AWT");
    L.add("ImageIO");
    L.add("Print");


    // Enterprise Java
    List<String> M = new ArrayList<>();
    M.add("EJB3");
    M.add("GWT");
    M.add("Hibernate");
    M.add("JSP");

    // Core Java
    List<String> N = new ArrayList<>();
    N.add("Apache");
    N.add("Applet");
    N.add("AspectJ");
    N.add("Beans");
    N.add("Crypto");

    // Desktop Java
    List<String> O = new ArrayList<>();
    O.add("Accessibility");
    O.add("AWT");
    O.add("ImageIO");
    O.add("Print");


    // Enterprise Java
    List<String> P = new ArrayList<>();
    P.add("EJB3");
    P.add("GWT");
    P.add("Hibernate");
    P.add("JSP");

    // Core Java
    List<String> Q = new ArrayList<>();
    Q.add("Apache");
    Q.add("Applet");
    Q.add("AspectJ");
    Q.add("Beans");
    Q.add("Crypto");


    // Desktop Java
    List<String> R = new ArrayList<>();
    R.add("Accessibility");
    R.add("AWT");
    R.add("ImageIO");
    R.add("Print");


    // Enterprise Java
    List<String> S = new ArrayList<>();
    S.add("EJB3");
    S.add("GWT");
    S.add("Hibernate");
    S.add("JSP");

    // Core Java
    List<String> T = new ArrayList<>();
    T.add("Apache");
    T.add("Applet");
    T.add("AspectJ");
    T.add("Beans");
    T.add("Crypto");

    // Desktop Java
    List<String> U = new ArrayList<>();
    U.add("Accessibility");
    U.add("AWT");
    U.add("ImageIO");
    U.add("Print");


    // Enterprise Java
    List<String> V = new ArrayList<>();
    V.add("EJB3");
    V.add("GWT");
    V.add("Hibernate");
    V.add("JSP");

    // Core Java
    List<String> W = new ArrayList<>();
    W.add("Apache");
    W.add("Applet");
    W.add("AspectJ");
    W.add("Beans");
    W.add("Crypto");


    // Desktop Java
    List<String> X = new ArrayList<>();
    X.add("Accessibility");
    X.add("AWT");
    X.add("ImageIO");
    X.add("Print");


    // Enterprise Java
    List<String> Y = new ArrayList<>();
    Y.add("EJB3");
    Y.add("GWT");
    Y.add("Hibernate");
    Y.add("JSP");

    // Core Java
    List<String> Z = new ArrayList<>();
    Z.add("Apache");
    Z.add("Applet");
    Z.add("AspectJ");
    Z.add("Beans");
    Z.add("Crypto");


    // Desktop Java
    List<String> AA = new ArrayList<>();
    AA.add("Accessibility");
    AA.add("AWT");
    AA.add("ImageIO");
    AA.add("Print");

    // Enterprise Java
    List<String> AB  = new ArrayList<>();
    AB.add("EJB3");
    AB.add("GWT");
    AB.add("Hibernate");
    AB.add("JSP");

    // Core Java
    List<String> AC = new ArrayList<>();
    AC.add("Apache");
    AC.add("Applet");
    AC.add("AspectJ");
    AC.add("Beans");
    AC.add("Crypto");


    // Desktop Java
    List<String> AD = new ArrayList<>();
    AD.add("Accessibility");
    AD.add("AWT");
    AD.add("ImageIO");
    AD.add("Print");


    // Enterprise Java
    List<String> AE = new ArrayList<>();
    AE.add("EJB3");
    AE.add("GWT");
    AE.add("Hibernate");
    AE.add("JSP");

    // Core Java
    List<String> AF = new ArrayList<>();
    AF.add("Apache");
    AF.add("Applet");
    AF.add("AspectJ");
    AF.add("Beans");
    AF.add("Crypto");


    // Desktop Java
    List<String> AG = new ArrayList<>();
    AG.add("Accessibility");
    AG.add("AWT");
    AG.add("ImageIO");
    AG.add("Print");


    // Enterprise Java
    List<String> AH = new ArrayList<>();
    AH.add("EJB3");
    AH.add("GWT");
    AH.add("Hibernate");
    AH.add("JSP");

    // Core Java
    List<String> AI = new ArrayList<>();
    AI.add("Apache");
    AI.add("Applet");
    AI.add("AspectJ");
    AI.add("Beans");
    AI.add("Crypto");


    // Desktop Java
    List<String> AJ = new ArrayList<>();
    AJ.add("Accessibility");
    AJ.add("AWT");
    AJ.add("ImageIO");
    AJ.add("Print");


    // Enterprise Java
    List<String> AK = new ArrayList<>();
    AK.add("EJB3");
    AK.add("GWT");
    AK.add("Hibernate");
    AK.add("JSP");

    // Core Java
    List<String> AL = new ArrayList<>();
    AL.add("Apache");
    AL.add("Applet");
    AL.add("AspectJ");
    AL.add("Beans");
    AL.add("Crypto");


    // Desktop Java
    List<String> AM = new ArrayList<>();
    AM.add("Accessibility");
    AM.add("AWT");
    AM.add("ImageIO");
    AM.add("Print");


    // Enterprise Java
    List<String> AN = new ArrayList<>();
    AN.add("EJB3");
    AN.add("GWT");
    AN.add("Hibernate");
    AN.add("JSP");

    // Core Java
    List<String> AO = new ArrayList<>();
    AO.add("Apache");
    AO.add("Applet");
    AO.add("AspectJ");
    AO.add("Beans");
    AO.add("Crypto");

    // Core Java
    List<String> AP = new ArrayList<>();
    AP.add("Apache");
    AP.add("Applet");
    AP.add("AspectJ");
    AP.add("Beans");
    AP.add("Crypto");

    // Core Java
    List<String> AQ = new ArrayList<>();
    AQ.add("Apache");
    AQ.add("Applet");
    AQ.add("AspectJ");
    AQ.add("Beans");
    AQ.add("Crypto");

    // Core Java
    List<String> AR = new ArrayList<>();
    AR.add("Apache");
    AR.add("Applet");
    AR.add("AspectJ");
    AR.add("Beans");
    AR.add("Crypto");


    listHash.put(ListDataHeader.get(0), A);
    listHash.put(ListDataHeader.get(1), B);
    listHash.put(ListDataHeader.get(2), C);
    listHash.put(ListDataHeader.get(3), D);
    listHash.put(ListDataHeader.get(4), E);
    listHash.put(ListDataHeader.get(5), F);
    listHash.put(ListDataHeader.get(6), G);
    listHash.put(ListDataHeader.get(7), H);
    listHash.put(ListDataHeader.get(8), I);
    listHash.put(ListDataHeader.get(9), J);
    listHash.put(ListDataHeader.get(10), K);
    listHash.put(ListDataHeader.get(11), L);
    listHash.put(ListDataHeader.get(12), M);
    listHash.put(ListDataHeader.get(13), N);
    listHash.put(ListDataHeader.get(14), O);
    listHash.put(ListDataHeader.get(15), P);
    listHash.put(ListDataHeader.get(16), Q);
    listHash.put(ListDataHeader.get(17), R);
    listHash.put(ListDataHeader.get(18), S);
    listHash.put(ListDataHeader.get(19), T);
    listHash.put(ListDataHeader.get(20), U);
    listHash.put(ListDataHeader.get(21), V);
    listHash.put(ListDataHeader.get(22), W);
    listHash.put(ListDataHeader.get(23), X);
    listHash.put(ListDataHeader.get(24), Y);
    listHash.put(ListDataHeader.get(25), Z);
    listHash.put(ListDataHeader.get(26), AA);
    listHash.put(ListDataHeader.get(27), AB);
    listHash.put(ListDataHeader.get(28), AC);
    listHash.put(ListDataHeader.get(29), AD);
    listHash.put(ListDataHeader.get(30), AE);
    listHash.put(ListDataHeader.get(31), AF);
    listHash.put(ListDataHeader.get(32), AG);
    listHash.put(ListDataHeader.get(33), AH);
    listHash.put(ListDataHeader.get(34), AI);
    listHash.put(ListDataHeader.get(35), AJ);
    listHash.put(ListDataHeader.get(36), AK);
    listHash.put(ListDataHeader.get(37), AL);
    listHash.put(ListDataHeader.get(38), AM);
    listHash.put(ListDataHeader.get(39), AN);
    listHash.put(ListDataHeader.get(40), AO);
    listHash.put(ListDataHeader.get(41), AP);
    listHash.put(ListDataHeader.get(42), AQ);
    listHash.put(ListDataHeader.get(43), AR);

}

}

My second activity code

public class ClassListDetail extends AppCompatActivity {

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

    Intent intent = getIntent();
    int position = intent.getIntExtra("position", 0);

    // Here we turn your string.xml in an array
    String[] myKeys = getResources().getStringArray(R.array.sects);

    TextView myTextView = (TextView) findViewById(R.id.my_textview);
    myTextView.setMovementMethod(new ScrollingMovementMethod());
    myTextView.setText(myKeys[position]);


    if (position == 0) {
        String text = "";
        try {
            InputStream is = getAssets().open("english/927.txt");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            text = new String(buffer);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        myTextView.setText(text);
    }

    if (position == 1) {
        String text = "";
        try {
            InputStream is = getAssets().open("english/210.txt");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            text = new String(buffer);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        myTextView.setText(text);
    }
    if (position == 2) {
        String text = "";
        try {
            InputStream is = getAssets().open("english/131.txt");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            text = new String(buffer);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        myTextView.setText(text);
    }
    if (position == 3) {
        String text = "";
        try {
            InputStream is = getAssets().open("english/edit.txt");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            text = new String(buffer);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        myTextView.setText(text);
    }
    if (position == 4) {
        String text = "";
        try {
            InputStream is = getAssets().open("english/792.txt");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            text = new String(buffer);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        myTextView.setText(text);
    }
    if (position == 5) {
        String text = "";
        try {
            InputStream is = getAssets().open("english/667.txt");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            text = new String(buffer);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        myTextView.setText(text);
    }

    if (position == 6) {
        String text = "";
        try {
            InputStream is = getAssets().open("english/676.txt");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            text = new String(buffer);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        myTextView.setText(text);
    }
    if (position == 7) {
        String text = "";
        try {
            InputStream is = getAssets().open("english/189.txt");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            text = new String(buffer);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        myTextView.setText(text);
    }

        }



    }




}

}

Thanks for your help in advance.

I see nothing wrong with your code except that onChildClick when you are calling ClassListDetail with an intent you are not passing the position and on the other hand you are trying to get position from intent which does not exist and then it takes its default value 0 and that is why it every child gets same file from the assets.

Edit:

Just replace the following method in your ClassActivity and see the output:

listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                                        int groupPosition, int childPosition, long id) {
                Intent myIntent = new Intent(ClassActivity.this, ClassListDetail.class);
                //here you need to determine which position you want to use according to your use case
                myIntent.putExtra("position",groupPosition);
                startActivity(myIntent);
                return false;
                return false;
            }
        });

Note: Here i have used group position just to put an example but if you need the childPosition you can use that.

If you want a good example of ExpandableListView try this link: https://www.journaldev.com/9942/android-expandablelistview-example-tutorial

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM