0

を作ってみました。リストビュー。しかし、それはうまくいきません。メイン アクティビティでこのボタンをクリックすると、クラッシュしました。

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Coming Soon: Expansion View"
    android:onClick="exp"
    />

メイン アクティビティの Java コードは次のとおりです。それは、私が開発しているゲームのシンプルなメイン メニューです。これは狂気です。

 package com.apw.games.rpg.medieval;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import android.content.*;
import android.util.*;
import android.graphics.*;

public class MainActivity extends Activity
{


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    AlertDialog alertDialog = new 
    AlertDialog.Builder(MainActivity.this).create();
    alertDialog.setTitle("Medieval: The Video Game");
    alertDialog.setMessage("All Games Begin. Season One of the Game, Version 1. First Expansion coming soon- Life of Darkness.");
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) {

//here you can add functions

            } });
    alertDialog.setIcon(R.drawable.medieval_background);
    alertDialog.show();
}



@Override
public void exp(View v) {
    Intent 
        intt = new Intent(this, Expansions.class);
    startActivity(intt);
}


@Override 
public void onNothingSelected(AdapterView<?> parent) {

 }
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.menu.menu, menu); return true; }

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
// Handle item selection 
switch (item.getItemId()) { 


    case R.id.quit: 
    Intent intent =  new Intent(this, Exit.class); 
    startActivity(intent); 
    return true; 
    case R.id.new_game: 
        Intent i = new Intent(this, New_Game.class); 
        startActivity(i); 
        return true; 
    case R.id.visit_site: 
        Intent inte = new Intent(this, Site.class); 
        startActivity(inte); 
        return true; 
    case R.id.apw_site: 
        Intent inten = new Intent(this, APWSite.class); 
        startActivity(inten); 
        return true; 

    default: return super.onOptionsItemSelected(item);

    }}}

リストビューのレイアウトは次のとおりです。また、これはすべて、StackOverflow の誰かから入手したチュートリアルからのものです。この最初のものは simplerow.xml と呼ばれます

 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/rowTextView" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content"
 android:padding="10dp"
 android:textSize="16sp" >
</TextView>

ここに、expansions.xml という名前のもう 1 つのファイルがあります。これらの「R.layout」ファイルで使用される Java コードは、後で投稿されます。

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
<ListView
android:id="@+id/list_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ListView>
</LinearLayout> 

ここに「グランドスラム」Java ファイルがありますが、これに加えて、これをすべて Android から実行しているため、何が起こっているのかわかりません。私の AIDE はエラーを表示しませんでしたが、アプリを起動してメイン アクティビティのボタンをクリックするとクラッシュします。それがonClickの問題なのか、それとも何なのかはわかりませんでした。

 package com.apw.games.rpg.medieval;

import java.util.ArrayList;
import java.util.Arrays;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.apw.games.rpg.medieval.*;

public class Expansions extends Activity {

  private ListView mainListView ;
  private ArrayAdapter<String> listAdapter ;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.expansions);

    // Find the ListView resource. 
    mainListView = (ListView) findViewById( R.id.list_view );

    // Create and populate a List of planet names.
    String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars",
                                  "Jupiter", "Saturn", "Uranus", "Neptune"};  
    ArrayList<String> planetList = new ArrayList<String>();
    planetList.addAll( Arrays.asList(planets) );


    listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, planetList);

    // Add more planets. If you passed a String[] instead of a List<String> 
    // into the ArrayAdapter constructor, you must not add more items. 
    // Otherwise an exception will occur.
    listAdapter.add( "Ceres" );
    listAdapter.add( "Pluto" );
    listAdapter.add( "Haumea" );
    listAdapter.add( "Makemake" );
    listAdapter.add( "Eris" );

    mainListView.setAdapter( listAdapter );      
  }
}

可能であれば、エラーの場所を教えてください。修正を手伝ってください。

4

2 に答える 2

0

これをxmlレイアウトに使用します:

       <ListView android:id="@+id/ListView1" android:layout_width="fill_parent"
       android:layout_height="wrap content" />

次のコード:

        public static String selected = "";
         private static final String[] RATINGS = new String[] {
    "1","2","3","4","5"
};

    ListView list = (ListView)findViewById(R.id.ListView1);

          list.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_single_choice, RATINGS));
    list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {

            selected = RATINGS[arg2];               
        }
    });
于 2012-09-29T04:10:33.557 に答える
0

これがあなたの問題だと思います:

listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, planetList); 

どのレイアウトを使用するかをアダプタに伝えていますが、レイアウト内のどの要素にデータをマップするかは伝えていません。カスタム TextView 名を使用しているため、アダプタにそのことを伝える必要があります。

使用しようとしているコンストラクターを使用すると、アダプターはデフォルトの TextView id を検索しますtext1

だから、あなたには選択肢があります。リソース ファイルと TextView id の両方を提供する別のコンストラクターを使用できます。

その場合、次のようになります。

listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, R.id.rowTextView, planetList); 

または、TextView の id を変更しtext1て、アダプターへの呼び出しをそのままにしておくこともできます。

アダプターの呼び出しに使用できるさまざまなコンストラクターの一覧については、 ArrayAdapter のドキュメントを参照してください。

于 2012-09-29T04:44:40.777 に答える