2013-05-02 6 views
0

J'essaye de créer un ListView avec 2 TextViews et 1 bouton. Lorsque les utilisateurs cliquent sur le bouton, l'activité se termine(); et passez le résultat à une autre vue. J'ai suivi this tutorial. Mais pour une raison quelconque, lorsque je clique pour démarrer cette activité, mon application se bloque! Voici les 3 fichiers de mon application qui sont pertinents.Android ListView avec 2 TextViews et 1 bouton

Liste des données Structure:

public class formulasListData { 
private String formulasName; 
private String formulasDefinition; 

public formulasListData(String formulasName, String formulasDefinition) { 
    super(); 
    this.formulasName = formulasName; 
    this.formulasDefinition = formulasDefinition; 
} 

public String getFormulasName() { 
    return formulasName; 
} 

public void setFormulasName(String formulasName) { 
    this.formulasName = formulasName; 
} 

public String getFormulasDefinition() { 
    return formulasDefinition; 
} 

public void setFormulasDefinition(String formulasDefinition) { 
    this.formulasDefinition = formulasDefinition; 
    } 
} 

L'adaptateur de liste:

public class formulasListAdapter extends BaseAdapter implements OnClickListener { 
private Context context; 
private List<formulasListData> formulasList; 

public formulasListAdapter(Context context, List<formulasListData> formulasList) { 
    this.context = context; 
    this.formulasList = formulasList; 
} 

@Override 
public int getCount() { 
    return formulasList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return formulasList.get(position); 
} 

@Override 
public long getItemId(int position) { 

    return position; 
} 

@Override 
public View getView(int position, View rowView, ViewGroup parent) { 
    formulasListData entry = formulasList.get(position); 
    if(rowView == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     rowView = inflater.inflate(R.layout.formulas_row, null); 
    } 

    TextView formulasName = (TextView) rowView.findViewById(R.id.formulas_name); 
    formulasName.setText(entry.getFormulasName()); 

    TextView formulasDefinition = (TextView) rowView.findViewById(R.id.formulas_definition); 
    formulasDefinition.setText(entry.getFormulasDefinition()); 

    Button btnSelect = (Button) rowView.findViewById(R.id.selectFormula); 
    btnSelect.setFocusableInTouchMode(false); 
    btnSelect.setFocusable(false); 
    btnSelect.setOnClickListener(this); 

    btnSelect.setTag(entry); 

    return rowView; 
} 
@Override 

public void onClick(View view) { 
    formulasListData entry = (formulasListData) view.getTag(); 
    } 

} 

Et l'activité qui devrait afficher la liste.

public class FormulasList extends Activity { 

private static final int FORMULA_0 = 0; 
private static final int FORMULA_1 = 1; 
private static final int FORMULA_2 = 2; 
private static final int FORMULA_3 = 3; 
private static final int FORMULA_4 = 4; 
private static final int FORMULA_5 = 5; 
private static final int FORMULA_6 = 6; 
// private static final int FORMULA_7 = 7; 

public void onCreate(Bundle savedInstance) { 
    super.onCreate(savedInstance); 

    ListView formulasListView = (ListView) findViewById(R.id.formulas_list); 
    formulasListView.setClickable(true); 
    final List<formulasListData> formulasList = new ArrayList<formulasListData>(); 

    final String[] formulasName = new String[] {"Circunference of a Circle:", 
           "Area of a Circle:", 
           "Volume of a Sphere:", 
           "Area Triangle:", 
           "Area Square:", 
           "Volume of a Cube:", 
           "Pithagorean Theorem:"}; 
    final String[] formulasDefinition = new String[] {"2 × π × r", 
             "π × r²", 
             "(4/3) × π × r³", 
             "(b × h)/2", 
             "side²", 
             "side³", 
             "a² + b² = c²"};   
    // formulasList.add(new formulasListData(formulasName, formulasDefinition)); 
    formulasList.add(new formulasListData(formulasName[0], formulasDefinition[0])); 
    formulasList.add(new formulasListData(formulasName[1], formulasDefinition[1])); 
    formulasList.add(new formulasListData(formulasName[2], formulasDefinition[2])); 
    formulasList.add(new formulasListData(formulasName[3], formulasDefinition[3])); 
    formulasList.add(new formulasListData(formulasName[4], formulasDefinition[4])); 
    formulasList.add(new formulasListData(formulasName[5], formulasDefinition[5])); 
    formulasList.add(new formulasListData(formulasName[6], formulasDefinition[6])); 

    SharedPreferences settings = getSharedPreferences(SettingsActivity.PREF_NAME, MODE_PRIVATE); 
    SettingsActivity.newTheme = settings.getInt("themeCustom", 0); 

    if(SettingsActivity.newTheme == SettingsActivity.THEME_DARK) { 
      setTheme(R.style.DarkTheme); 
     } else if(SettingsActivity.newTheme == SettingsActivity.THEME_LIGHT){ 
      setTheme(R.style.LightTheme); 
     } else if(SettingsActivity.newTheme == SettingsActivity.THEME_COLORS) { 
      setTheme(R.style.ColorsTheme); 
     } else { 
      setTheme(R.style.AppTheme); 
     } 
    setContentView(R.layout.activity_formulas); 

    formulasListAdapter adapter = new formulasListAdapter(this, formulasList); 

    formulasListView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position,long index) { 
      Intent intent= getIntent(); 
      Bundle b = new Bundle(); 
      switch (position) { 
      case FORMULA_0: 
       b.putString("key0", formulasDefinition[0]); 
       intent.putExtras(b); 
       setResult(RESULT_OK, intent); 
       finish(); 
       break; 
      case FORMULA_1: 
       b.putString("key0", formulasDefinition[1]); 
       intent.putExtras(b); 
       setResult(RESULT_OK, intent); 
       finish(); 
       break; 
      case FORMULA_2: 
       b.putString("key0", formulasDefinition[2]); 
       intent.putExtras(b); 
       setResult(RESULT_OK, intent); 
       finish(); 
       break; 
      case FORMULA_3: 
       b.putString("key0", formulasDefinition[3]); 
       intent.putExtras(b); 
       setResult(RESULT_OK, intent); 
       finish(); 
       break; 
      case FORMULA_4: 
       b.putString("key0", formulasDefinition[4]); 
       intent.putExtras(b); 
       setResult(RESULT_OK, intent); 
       finish(); 
       break; 
      case FORMULA_5: 
       b.putString("key0", formulasDefinition[5]); 
       intent.putExtras(b); 
       setResult(RESULT_OK, intent); 
       finish(); 
       break; 
      case FORMULA_6: 
       b.putString("key0", formulasDefinition[6]); 
       intent.putExtras(b); 
       setResult(RESULT_OK, intent); 
       finish(); 
       break; 
      default: 
       break; 
      }    
     } 
    });  
    formulasListView.setAdapter(adapter); 
    } 
} 

Merci beaucoup!

EDIT: Voici le LogCat

05-01 20:06:54.436: D/libEGL(4820): loaded /system/lib/egl/libEGL_tegra.so 
05-01 20:06:54.456: D/libEGL(4820): loaded /system/lib/egl/libGLESv1_CM_tegra.so 
05-01 20:06:54.466: D/libEGL(4820): loaded /system/lib/egl/libGLESv2_tegra.so 
05-01 20:06:54.486: D/OpenGLRenderer(4820): Enabling debug mode 0 
05-01 20:06:54.536: D/dalvikvm(4820): GC_CONCURRENT freed 170K, 4% free 7509K/7808K, paused 4ms+10ms, total 38ms 
05-01 20:06:59.976: D/AndroidRuntime(4820): Shutting down VM 
05-01 20:06:59.976: W/dalvikvm(4820): threadid=1: thread exiting with uncaught exception (group=0x40cde930) 
05-01 20:06:59.976: E/AndroidRuntime(4820): FATAL EXCEPTION: main 
05-01 20:06:59.976: E/AndroidRuntime(4820): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gabilheri.marcuscalculatorv2/com.gabilheri.marcuscalculatorv2.FormulasList}: java.lang.NullPointerException 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.os.Looper.loop(Looper.java:137) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at dalvik.system.NativeStart.main(Native Method) 
05-01 20:06:59.976: E/AndroidRuntime(4820): Caused by: java.lang.NullPointerException 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at com.gabilheri.marcuscalculatorv2.FormulasList.onCreate(FormulasList.java:30) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.app.Activity.performCreate(Activity.java:5104) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
05-01 20:06:59.976: E/AndroidRuntime(4820):  ... 11 more 
+0

Peut-on avoir l'impression logcat, savoir pourquoi l'application se bloque – brendosthoughts

+0

Edité avec le logcat –

Répondre

0

Essayez de déplacer setContentView (R.layout.activity_formulas); Au début de la méthode. Juste après le super appel.

Vous essayez d'utiliser les commandes avant d'initialiser l'interface graphique mise en page d'activité

+0

Il a travaillé !! Que toi!! :) Mais maintenant j'ai un autre problème, pour une raison quelconque le bouton ne fonctionne pas ... mais si je clique dans la liste Item ça marche bien ... –

+0

@MarcusGabilheri parce que vous ne faites rien dans votre adaptateur onclicklistener ' Méthode onclick – tigger

+0

Donc je devrais déplacer le code de ma liste de formules vers l'adaptateur? Je vais l'essayer! Merci Mais dans mon instruction switch dans formulasList je reçois l'élément par la "position" pour l'utiliser à l'intérieur de l'adaptateur si j'utilise simplement getPosition(); ? –

Questions connexes