用户单击按钮时显示ListView

时间:2017-12-27 23:45:06

标签: android listview

我做了一个迷你冒险游戏,玩家可以去北,南,东,西等地。

现在我希望玩家保留库存,但我不知道如何制作GUI。我希望在用户点击广告资源按钮时显示ListView

enter image description here

视图的代码如下。

package dev.game.adventure;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.*;
import android.support.annotation.Nullable;
import android.os.*;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.util.AttributeSet;
import android.view.*;
import android.widget.*;
import java.util.Collection;
import java.util.Iterator;


/**
 * An adventure that shows and hides the system UI (i.e.
 * status bar and navigation/system bar) with user interaction.
 */
public class AdventureActivity extends AppCompatActivity {
    /**
     * Whether or not the system UI should be auto-hidden after
     * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
     */
    private static final boolean AUTO_HIDE = true;
    PlaceView ag;

    /**
     * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
     * user interaction before hiding the system UI.
     */
    private static final int AUTO_HIDE_DELAY_MILLIS = 3000;

    /**
     * Some older devices needs a small delay between UI widget updates
     * and a change of the status and navigation bar.
     */
    private static final int UI_ANIMATION_DELAY = 300;
    private final Handler mHideHandler = new Handler();
    private View mContentView;
    private final Runnable mHidePart2Runnable = new Runnable() {
        @SuppressLint("InlinedApi")
        @Override
        public void run() {
            // Delayed removal of status and navigation bar

            // Note that some of these constants are new as of API 16 (Jelly Bean)
            // and API 19 (KitKat). It is safe to use them, as they are inlined
            // at compile-time and do nothing on earlier devices.
            mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        }
    };
    private View mControlsView;
    private final Runnable mShowPart2Runnable = new Runnable() {
        @Override
        public void run() {
            // Delayed display of UI elements
            ActionBar actionBar = getSupportActionBar();
            if (actionBar != null) {
                actionBar.show();
            }
            mControlsView.setVisibility(View.VISIBLE);
        }
    };
    private boolean mVisible;
    private final Runnable mHideRunnable = new Runnable() {
        @Override
        public void run() {
            hide();
        }
    };
    /**
     * Touch listener to use for in-layout UI controls to delay hiding the
     * system UI. This is to prevent the jarring behavior of controls going away
     * while interacting with activity UI.
     */
    private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (AUTO_HIDE) {
                delayedHide(AUTO_HIDE_DELAY_MILLIS);
            }
            return false;
        }
    };

    TextView scrollable;

    static final String[] FRUITS = new String[] { "Apple", "Avocado", "Banana",
            "Blueberry", "Coconut", "Durian", "Guava", "Kiwifruit",
            "Jackfruit", "Mango", "Olive", "Pear", "Sugar-apple" };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fullscreen);
        scrollable = (TextView) findViewById(R.id.textView1);
        scrollable.setMovementMethod(new ScrollingMovementMethod());
        ag = findViewById(R.id.view);
        ag.text = scrollable;
        ag = findViewById(R.id.view);
        new Adventure(scrollable, this, ag);
        Button buttonOne = (Button) findViewById(R.id.close);
        buttonOne.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                ag.mainCharacter.go("North", ag.target);
                ag.display("North", ag.target, ag.mainCharacter.place);
            }
        });

        Button buttonOne2 = (Button) findViewById(R.id.close2);
        buttonOne2.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                ag.mainCharacter.go("East", ag.target);
                ag.display("East", ag.target, ag.mainCharacter.place);
            }
        });

        Button buttonOne3 = (Button) findViewById(R.id.close3);
        buttonOne3.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                ag.mainCharacter.go("South", ag.target);
                ag.display("South", ag.target, ag.mainCharacter.place);
            }
        });

        Button buttonOne4 = (Button) findViewById(R.id.close4);
        buttonOne4.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                ag.mainCharacter.go("West", ag.target);
                ag.display("West", ag.target, ag.mainCharacter.place);
            }
        });

        Button buttonOne5 = (Button) findViewById(R.id.close5);
        buttonOne5.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                ag.mainCharacter.go("Up", ag.target);
                ag.display("Up", ag.target, ag.mainCharacter.place);
            }
        });

        Button buttonOne6 = (Button) findViewById(R.id.close6);
        buttonOne6.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                ag.mainCharacter.go("Down", ag.target);
                ag.display("Down", ag.target, ag.mainCharacter.place);
            }
        });

        Button buttonOne7 = (Button) findViewById(R.id.close7);
        buttonOne7.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                ag.mainCharacter.say("Where is the key?", ag.target);

                for (Iterator<Person> i = ag.persons.iterator(); i.hasNext();) {
                    Person item = i.next();
                    if (item instanceof WalkingPerson) {
                        WalkingPerson item2 = (WalkingPerson) item;
                        item2.query(ag.mainCharacter, ag.target);
                    }
                }
            }
        });


        Button buttonOne8 = (Button) findViewById(R.id.close7);
        buttonOne7.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {



            }
        });

        ag.mainCharacter.goTo("Dungeon", this);
        ag.display("", this, ag.mainCharacter.place);
    }


    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        // Trigger the initial hide() shortly after the activity has been
        // created, to briefly hint to the user that UI controls
        // are available.
        // delayedHide(100);
    }

    private void toggle() {
        if (mVisible) {
            hide();
        } else {
            show();
        }
    }

    private void hide() {
        // Hide UI first
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }
        mControlsView.setVisibility(View.GONE);
        mVisible = false;

        // Schedule a runnable to remove the status and navigation bar after a delay
        mHideHandler.removeCallbacks(mShowPart2Runnable);
        mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY);
    }

    @SuppressLint("InlinedApi")
    private void show() {
        // Show the system bar
        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
        mVisible = true;

        // Schedule a runnable to display UI elements after a delay
        mHideHandler.removeCallbacks(mHidePart2Runnable);
        mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY);
    }

    /**
     * Schedules a call to hide() in delay milliseconds, canceling any
     * previously scheduled calls.
     */
    private void delayedHide(int delayMillis) {
        mHideHandler.removeCallbacks(mHideRunnable);
        mHideHandler.postDelayed(mHideRunnable, delayMillis);
    }
}

class PlaceView extends View {
    public PlaceView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        NBRSTEPS = 4;//difficulty;
        heroName = "Jamie";//name;
        target = (AdventureActivity) context;

        this.cont = context;
        x = new int[NBRSTEPS];
        y = new int[NBRSTEPS];
        this.target = target;
        hero_positions = new int[NBRSTEPS];
        int resourceIdFalling = 0;
        int resourceIdHero = 0;

        falling = BitmapFactory.decodeResource(getResources(), resourceIdFalling); //load a falling image
        hero = BitmapFactory.decodeResource(getResources(), resourceIdHero); //load a hero image
    }

    public Collection<Person> getPersons() {
        return persons;
    }

    Person mainCharacter;

    public void setPersons(Collection<Person> persons) {
        this.persons = persons;
    }

    public void display(String s1, AdventureActivity target, Place p) {
        setBackground(p.image);
        target.scrollable.append("This place is called " + p.getName() + ".");
        if(p.getName().equals("Heaven")) {
            final Toast toast = Toast.makeText(target.ag.getContext(), "GAME OVER!\n", Toast.LENGTH_LONG);// duration);
            toast.show();
        }

    }

    /**
     * Persons at this Place.
     */
    public Collection<Person> persons;
    int NBRSTEPS; // number of discrete positions in the x-dimension; must be uneven
    String heroName;
    int[] x; // x-coordinates for falling objects
    int[] y; // y-coordinates for falling objects
    int[] hero_positions; // x-coordinates for hero
    int ballW; // width of each falling object
    int ballH; // height of ditto
    Bitmap falling, hero;

    Context cont;
    TextView text;
    AdventureActivity target;



    // update the canvas in order to display the game action
    @Override
    public void onDraw(Canvas canvas) {

        super.onDraw(canvas);
        int xx = 200;
        int yy = 0;
        if (persons != null) {
            synchronized (persons) {
                Iterator<Person> iterate = persons.iterator();
                while (iterate.hasNext()) {
                    Person p = iterate.next();
                    if (p.getImage() != 0) {
                        hero = BitmapFactory.decodeResource(getResources(), p.getImage()); //load a character image
                        // Draw the visible person's appearance
                        //  g.drawImage(appearance, xx,
                        //          240 + yy - (appearance.getHeight(this) * 4) / 5,
                        //          this);
                        canvas.drawBitmap(hero, xx, 0, null); //Draw the hero on the canvas.

                        // Draw the name
                        Paint paint = new Paint();
                        paint.setStyle(Paint.Style.FILL);

                        canvas.save();
                       // canvas.translate(100, 200);
                        paint.setStrokeWidth(1);
                        paint.setColor(Color.WHITE);
                        paint.setTextSize(50);
                        canvas.drawText(p.name, 0, 0, paint);
                        xx += 500;
                        yy = (int) (Math.random() * 20);
                    }
                }
            }
        }
        canvas.save(); //Save the position of the canvas.
        canvas.restore();
        //Call the next frame.
        invalidate();
    }
}

我发现ListView的所有示例都使用XML来包含ListView但是如何在按下库存按钮时显示它?

My XML layout is the following. 

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dip">

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/close"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="0"
            android:text="@string/north" />

        <Button
            android:id="@+id/close2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="1"
            android:text="@string/east" />

        <Button
            android:id="@+id/close3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="2"
            android:text="@string/south" />

        <Button
            android:id="@+id/close4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="3"
            android:text="@string/west" />

        <Button
            android:id="@+id/close5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="4"
            android:text="@string/up" />

        <Button
            android:id="@+id/close6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="5"
            android:text="@string/down" />



        <Button
            android:id="@+id/close7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="6"
            android:text="@string/say" />


        <Button
            android:id="@+id/close8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="7"
            android:text="@string/inventory" />
        <Button
            android:id="@+id/close9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="8"
            android:text="@string/take" />
        <Button
            android:id="@+id/close10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:layout_alignParentBottom="true"
            android:layout_column="9"
            android:text="@string/drop" />

    </TableRow>
    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_span="6"
            android:layout_weight="1"
            android:scrollbars="none">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"

                android:background="#FFFFFF"
                android:gravity="bottom"
                android:maxLines="2"
                android:scrollbars="vertical"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="#000000" />

        </ScrollView>

    </TableRow>
    <TableRow
        android:id="@+id/tableRow3"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1">

        <dev.game.adventure.PlaceView
            android:id="@+id/view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_span="6"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:background="#FFFFFF"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="10dp" />
    </TableRow>
</TableLayout>

我从答案中尝试了以下代码,但它没有做任何事情。

ListView DynamicListView = new ListView(this);

final String[] DynamicListElements = new String[] {
        "Hello",
        "Hi",
        "Android Studio",
        "Java"
};

ArrayAdapter adapter = new ArrayAdapter (AdventureActivity.this, android.R.layout.simple_list_item_1, DynamicListElements);
DynamicListView.setAdapter(adapter);



TableRow element1 = (TableRow) findViewById(R.id.tableRow3);
element1.addView(DynamicListView);

1 个答案:

答案 0 :(得分:2)

//create a new layout or use if you have one
LinearLayout linearLayout = new LinearLayout(this);

//creating listview dynamically
ListView DynamicListView = new ListView(this);

//lit items. Hardcoded here, you can set the values dynamically using ArrayList

final String[] DynamicListElements = new String[] {"Hello","Hi","Android Studio","Java"};

如果您的活动名称与MainActivity不同,则相应地进行更改。在这个例子中,我使用了MainActivity.this

ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, DynamicListElements);

DynamicListView.setAdapter(adapter);

linearLayout.addView(DynamicListView);

//this may not be needed if you are using exisitng layout
this.setContentView(linearLayout, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));