2014-02-21 2 views
0

Я пытаюсь открыть новый XML-файл или текстовый файл, когда пользователь выбирает элемент в списке. Ниже мой код: Оригинал Вопрос ->Открыть файл xml в элементе списка Нажмите

MainActivity.java

package com.example.listview; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends ListActivity { 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
     "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
     "Linux", "OS/2" }; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_1, values); 
    setListAdapter(adapter); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
    String item = (String) getListAdapter().getItem(position); 
    Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show(); 
    } 
} 

onListItemClick Когда срабатывает я хочу открыть XML-файл, который имеет какие-то данные. Когда «Android» выбрано android.xml, отображается. Когда выбрано «iPhone» iphone.xml, отображается.

+1

Итак, в чем проблема? Что вы спрашиваете здесь ??? –

+0

Я не уверен, как показать связанный файл .xml при выборе элемента. – Mihir

+0

позиция - это индекс элемента списка. так почему у вас есть 'int postion = 0;' удалить его и удалить String [] values ​​= null; – Raghunandan

ответ

1

В onItemClick

Следовать

http://www.youtube.com/watch?v=zjHYyAJQ7Vw&list=PL3D7BFF1DDBDAAFE5

который, кажется, хороший учебник для начала.

Вы не открываете xml. Вы переходите к другому действию, основанному на позиции щелчка элемента списка. Каждое действие будет иметь свой собственный макет.

Ниже следует работать

try 
{ 
String val = values[postion]; 
Class ourClass = Class.forName("com.example.listview."+val); 
Intent intent = new Intent(MainActivity.this,ourClass); 
startActivity(intent); 
}catch(Exception e){ 
     e.prinStacktrace(); 
} 

Убедитесь, что вы делаете запись для Activities в файле манифеста

Edit:

public class MainActivity extends ListActivity { 
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
     "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
     "Linux", "OS/2" }; 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_1, values); 
    setListAdapter(adapter); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
    try 
    { 
    String val = values[postion]; 
    Class ourClass = Class.forName("com.example.listview."+val); 
    Intent intent = new Intent(MainActivity.this,ourClass); 
    startActivity(intent); 
    }catch(Exception e){ 
      e.prinStacktrace(); 
    } 
    } 
} 
+0

Будут некоторые проблемы с именами классов на основе значений String [], которые он перечисляет.Я могу попробовать вместо if if else. if (val.equals («Mac OS X») {Intent intent = new Intent (это, MacOSX.class);} ... – wblaschko

+0

@wblaschko, о каких проблемах вы говорите? – Raghunandan

+0

«OS/2» для Например, это был бы плохой выбор имен классов, но он читается человеком, поэтому ему нужно оставаться таким же в ListView. – wblaschko

0

Исходя из предположений, упомянутых в разговоре на @ Raghunandan-х ответ, вот как я выполнил бы эту задачу. Это предполагает, что для каждого из ваших разных XML (Android, iPhone и т. Д.) Не требуются уникальные функции (в этом могли бы быть способы использования этого метода, используя onClicks в макете), но цель состоит в том, чтобы отображать информацию.

Это класс, который отвечал:

public class MainActivity extends ListActivity { 
    ... 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     String item = (String) getListAdapter().getItem(position); 
     Intent intent = new Intent(this, DisplayInformation.class); 
     Bundle bundle = new Bundle(); 
     int layout; 
     //figure out which layout we want to display based on our human-readable String[] 
     if(item.equals("Android")){ 
      layout=R.id.android; 
     }else if(item.equals("iPhone")){ 
      layout=R.id.iphone; 
     }else if{ 
      ... 
     } 
     //attach the bundle with the layout to the intent 
     bundle.putInt("layout",layout); 
     intent.putExtras(bundle); 

     //start our intent 
     startActivity(intent); 
    } 
} 

Это новый класс я хотел бы использовать для отображения информации:

public class DisplayInformation extends Activity{ 
    @Override 
    public void onCreate(Bundle icicle){ 
     this.super(icicle); 
     Bundle extras = getIntent().getExtras(); 
     if(extras.containsKey("layout")){ 
      setContentView(extras.getInt("layout")); 
     }else{ 
      //we tried to start the activity with no layout defined 
      this.finish(); 
     } 

    } 
} 

И манифеста

<activity android:name=".MainActivity" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name= "android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity android:name=".DisplayInformation" android:label="@string/app_name"/> 
2

lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch(position){ case 0: Intent firstIntent = new Intent(AndroidListViewActivity.this, SingleListItem.class); startActivity(firstIntent); break;
case 1: Intent secondintent = new Intent(AndroidListViewActivity.this, jokes.class); startActivity(secondintent); break;

+0

Надеюсь, эта помощь ... попробуйте этот код. –

Смежные вопросы