2010-11-24 3 views
0

이 .xml 파일에 국가 및 해당 국가 코드가 들어 있습니다. XML을 구문 분석하여 Android의 AlertDialog에 표시하십시오.

<?xml version="1.0" encoding="UTF-8"?> 
<landen> 
<land> 
    <naam>Afghanistan</naam> 
    <code>AF</code> 
</land> 
<land> 
    <naam>Albani�</naam> 
    <code>AL</code> 
</land> 
<land> 
    <naam>Algerije</naam> 
    <code>DZ</code> 
</land> 
<land> 
</landen> 

가 지금은 사람들이 목록에서 한 국가를 선택합니다 :이처럼 보이는 방법이다. 나는 AlertDialog가 모든 것을 표시하는 것이 좋을지라도.

난 내 XML 파일에서 값을 얻는 방법은 다음과 같이이다 :

protected ArrayList<Land> getLanden() { 
    ArrayList<Land> lijst = new ArrayList<Land>(); 
    try { 
     DocumentBuilder builder =DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
     Document doc = builder.parse(getAssets().open("landenlijst.xml")); 
     NodeList nl = doc.getElementsByTagName("land"); 
     for (int i=0;i<nl.getLength();i++) { 
      Node node = nl.item(i); 

      Land land = new Land(); 

      land.land = Xml.innerHtml(Xml.getChildByTagName(node, "naam")); 
      land.landcode = Xml.innerHtml(Xml.getChildByTagName(node, "code")); 
      lijst.add(land); 
     } 
     Log.d("Gabug","Klaar met parsen"); 
     Log.d("Gabug","Landen: " + lijst); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return lijst; 
} 

그리고 내에 AlertDialog 만들기 위해 이것을 사용 :이 경우 모르는

public void KiesLandMenu(){ 
     ArrayList<Land> alleLanden = getLanden(); 
     final CharSequence[] items = alleLanden.toArray(new CharSequence[alleLanden.size()]); 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Kies land"); 
     builder.setItems(items, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       switch (item){ 
        case 0: 
         break; 
        case 1: 
         break; 
        case 2: 
         break; 
       } 
      } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 

을 내가 DDL을 기록 할 때 DDMS가 일부 바이트 코드 또는 무언가를 반환하기 때문에 작동합니다. 그리고 그 후 그것은 강제로 ArrayStoreException 때문에 종료합니다 ..

내 질문은; 이것이 최선의 방법인가요? 그렇다면 어떻게 ArrayStoreException을 수정할 수 있습니까? 그렇지 않다면 내 사용자가 국가를 선택할 수있는 더 좋은 방법은 무엇입니까? 또한, 어떻게 누군가가 도청했는지 등록 할 수 있습니까?

는 편집 :

public void KiesLandMenu(){ 
    ArrayAdapter<Land> arrAdapter; 
    ArrayList<Land> alleLanden = getLanden(); 
    arrAdapter = new ArrayAdapter<Land>(this, android.R.layout.simple_list_item_single_choice, alleLanden); 

    ListView list = (ListView)findViewById(R.layout.lijstview); 
    list.setAdapter(arrAdapter); 
    list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

    list.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> list, View view, int position, 
       long id) { 
      Log.e("item clicked", String.valueOf(position)); 
     } 
    }); 
} 

NullPointerException이 당신은 아마 AlertDialog를 확장하고 그것을 줄 수 list.setAdapter(arrAdapter);

+1

(ListView) findViewById (R.layout.lijstview)가 null을 반환합니다. R.id.lijstview입니다. – techiServices

+0

레이아웃 폴더에 lijstview.xml을 생성했는데 Eclipse에서 오류가 발생하지 않습니다. R.id.lijstview를 입력하면 에러가 발생합니다. – Galip

+0

먼저 onCreate에서 레이아웃을 설정해야합니다. 아래에서 내 대답을 편집합니다. – Zarah

답변

1

ListView를 사용하여 레이아웃을 만든 다음 onCreate에서 해당 레이아웃을 설정하십시오. 목록을 확인하려면, 당신은 같은 작업을 수행 할 수 있습니다

public class RunTestProject extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); //whatever you want your layout to be 
} 

// getLanden() implementation goes here 


public void KiesLandMenu(){ 
    ArrayList<Land> alleLanden = getLanden(); 
    arrAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, alleLanden); 

    Dialog dialog = new Dialog(this); 
    dialog.setTitle("Kies land"); 
    dialog.setContentView(R.layout.withList); // The dialog layout 
    ListView list = (ListView) dialog.findViewById(android.R.id.list); //note that it's not simply findViewById 
    list.setAdapter(arrAdapter); 
    list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

    list.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> list, View view, int position, 
       long id) { 
      Log.e("item clicked", String.valueOf(position)); 
     } 
    }); 

    dialog.show();  
} 

}

사용자가 항목을 선택하면, 당신은 배열의 항목의 위치가 표시되어 있는지 로그를 볼 수 있습니다. 참고

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <ListView android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     /> 
</LinearLayout> 
+0

내 편집 내 의견보기. – Galip

+0

내 대답을 편집했습니다. – Zarah

0

에있다 ..

나는 약간 아래의 샘플 코드를 변경하고 나는 지금 NullPointerException이 얻을 ListView보기. 그런 다음 ListViewArrayList을 사용하는 ListAdapter에 바인딩합니다.

편집 :

ListView lv = new ListView(context); 
ArrayAdapter aa = new ListAdapter(context, viewid, lijst); 
lv.setAdapter(aa); 
AlertDialog ad = new AlertDialog(context); 
ad.setView(lv); 

이 생각보다 약간 더 많은 작업이 있습니다. viewid을 지정해야합니다. ViewListView의 각 항목을 나타냅니다.

sdk 레퍼런스는 매우 잘 알고 있습니다.

+0

당신이 저에게하는 말을 이해할 수 없기 때문에 어쩌면 저에게 보여줄 수 있습니까? – Galip

+0

모두 무료 코드를 원합니다 ... 5 분을주세요. – techiServices

+0

샘플 코드가 필요합니다. 나는 네가하는 말을 이해하지 못해 내가 예를 묻는다. jeez ... – Galip

0
new AlertDialog.Builder(this) 
      .setIcon(R.drawable.alert_dialog_icon) 
      .setTitle(R.string.alert_dialog_single_choice) 
      .setSingleChoiceItems(<ListAdapter> or CharaSequnce[] , 0, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked on a radio button do some stuff */ 
       } 
      }) 
      .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked Yes so do some stuff */ 
       } 
      }) 
      .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        /* User clicked No so do some stuff */ 
       } 
      }) 
      .create(); 

: 뭔가처럼

귀하의 레이아웃 파일이 될 수 이 (

.setSingleChoiceItems 아래에 언급 굵은 텍스트 This link to Api를 참조하십시오 CharacterSequnce [], 0, 새로운 DialogInterface.OnClickListener() ....

희망이 도움이됩니다. 감사합니다 :)