익스펜더블 리스트뷰에서 웹뷰띄우기 질문입니다
조회수 3260회
안드로이드 스튜디오에서 익스펜더블 리스트뷰를 만들어서 해당 Child리스트를 클릭시 관련 토스트를 띄우는거까지하는 코드입니다.
여기다 토스트를 띄우면서 동시에 각각의 child리스트에 다른 url을 입력하여, 해당된 웹뷰들을 띄우게하고싶은데, 어떻게 해야할까요?
MainActivity.java
package com.example.myexpandable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
ExpandableListView listMain;
private ArrayList<String> arrayGroup = new ArrayList<String>();
private HashMap<String,ArrayList<String>> arrayChild = new HashMap<String, ArrayList<String>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listMain = (ExpandableListView) this.findViewById(R.id.expandableListView1);
setArrayDate();
listMain.setAdapter(new AdptMain(this, arrayGroup, arrayChild));
listMain.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
String menu = arrayChild.get( arrayGroup.get(groupPosition)).get(childPosition);
Toast.makeText(getApplicationContext(), menu+"홈페이지로 이동합니다~", Toast.LENGTH_SHORT).show();
return false;
}
});
}
private void setArrayDate() {
arrayGroup.add("햄버거 매장");
arrayGroup.add("피자 매장");
arrayGroup.add("중국집");
ArrayList<String> arrayHamberger = new ArrayList<String>();
arrayHamberger.add("맥도날드");
arrayHamberger.add("버거킹");
arrayHamberger.add("롯데리아");
ArrayList<String> arrayPizza = new ArrayList<String>();
arrayPizza.add("피자헛");
arrayPizza.add("피자스쿨");
arrayPizza.add("미스터피자");
arrayPizza.add("피자에땅");
arrayPizza.add("피자알볼로");
ArrayList<String> arrayChinese = new ArrayList<String>();
arrayChinese.add("청마루");
arrayChinese.add("차이차이");
arrayChinese.add("홍콩반점");
arrayChild.put(arrayGroup.get(0), arrayHamberger);
arrayChild.put(arrayGroup.get(1), arrayPizza);
arrayChild.put(arrayGroup.get(2), arrayChinese);
}
}
AdptMain.java
package com.example.myexpandable;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
public class AdptMain extends BaseExpandableListAdapter {
private Context context;
private ArrayList<String> arrayGroup;
private HashMap<String, ArrayList<String>> arrayChild;
public AdptMain( Context context, ArrayList<String> arrayGroup, HashMap<String, ArrayList<String>> arrayChild){
super();
this.context = context;
this.arrayChild= arrayChild;
this.arrayGroup= arrayGroup;
}
@Override
public int getGroupCount() {
return arrayGroup.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return arrayChild.get( arrayGroup.get( groupPosition )).size();
}
@Override
public Object getGroup(int groupPosition) {
return arrayGroup.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return arrayChild.get( arrayGroup.get( groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
String groupName = arrayGroup.get(groupPosition);
View v = convertView;
if( v == null){
LayoutInflater inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = (RelativeLayout)inflater.inflate(R.layout.listviewitem_group, null);
}
TextView textGroup = (TextView) v.findViewById(R.id.textGroup);
textGroup.setText(groupName);
return v;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
String childName = arrayChild.get(arrayGroup.get(groupPosition)).get(childPosition);
View v = convertView;
if( v == null){
LayoutInflater inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = (RelativeLayout)inflater.inflate(R.layout.listviewitem_child, null);
}
TextView textChild = (TextView) v.findViewById(R.id.textChild);
textChild.setText(childName);
return v;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:andriod="http://schemas.android.com/apk/res-auto"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.myexpandable.MainActivity">
<ExpandableListView
android:id="@+id/expandableListView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
listviewitem_group.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textChild"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:padding="10dp"
android:text="Child"/>
</RelativeLayout>
listviewitem_child.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:padding="20dp"
android:text="Group" />
</RelativeLayout>
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
Child 리스트를 생성할 때, 이름과 함께 Url 정보도 추가할 수 있도록 코드를 수정하시기 바랍니다. 현재 Child 리스트에 아이템을 다음과 같이 추가하고 있는데요.
ArrayList<String> arrayPizza = new ArrayList<String>(); arrayPizza.add("피자헛"); arrayPizza.add("피자스쿨"); arrayPizza.add("미스터피자"); arrayPizza.add("피자에땅"); arrayPizza.add("피자알볼로");
방법1
다음과 같이 이름과 Url 두 정보를 저장할 수 있는 별도의 모델을 만들어서 리스트에 아이템을 추가하시기 바랍니다. 코드는 필요한 부분만 작성했습니다.
ArrayList<Store> arrayPizza = new ArrayList<Store>(); arrayPizza.add(new Store("피자헛", "http://...")); arrayPizza.add(new Store("피자스쿨", "http://...")); arrayPizza.add(new Store("미스터피자", "http://...")); arrayPizza.add(new Store("피자에땅", "http://...")); arrayPizza.add(new Store("피자알볼로", "http://...")); ... arrayChild.put(arrayGroup.get(0), arrayPizza); ... static class Store { String name; String url; public Model(String name, String url) { this.name = name; this.url = url; } }
방법2
별도의 모델을 만들고 싶지 않다면 Pair 클래스를 사용하는 것도 방법입니다. (참고, 클릭 리스너에서 Pair의 first, second 필드를 통해서 이름과 Url을 가져올 수 있습니다. 자세한 내용은 문서를 확인하세요.)
ArrayList<Pair> arrayPizza = new ArrayList<>(); arrayPizza.add(new Pair<>("피자헛", "http://...")); arrayPizza.add(new Pair<>("피자스쿨", "http://...")); arrayPizza.add(new Pair<>("미스터피자", "http://...")); arrayPizza.add(new Pair<>("피자에땅", "http://...")); arrayPizza.add(new Pair<>("피자알볼로", "http://...")); ... arrayChild.put(arrayGroup.get(0), arrayPizza); ...
웹뷰
현재 코드는 클릭 시 토스트로 이름을 출력하고 있는데요. 같은 방법으로 Url을 가져와서 웹뷰를 띄우면 됩니다. 이 부분은 코드가 없어도 해결할 수 있을 것 같아 따로 코드를 작성하지 않았습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력