Android ListView用图片开始另一项活动

时间:2017-09-26 07:52:50

标签: java android listview

我需要帮助我是Android开发的新手。我正在创建这个Starbuzz应用程序。顶级屏幕显示带有Big TextView的星巴克徽标“Starbuzz Coffee”,当用户点击Drink时,它有一个包含3项(饮料,食品商店)的ListView,弹出一个新屏幕, 这是XML中的代码:

    <ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:src = "@drawable/starbucks_logo"
    android:id = "@+id/image_id"
    android:layout_marginLeft = "10dp"/>
 <TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text = "@string/starbuzz1"
   android:id = "@+id/starbuzz1_id"
   android:textSize = "54sp"
   android:layout_marginLeft = "120dp"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text = "@string/starbuzz2"
    android:id = "@+id/starbuzz2_id"
    android:textSize = "54sp"
    android:layout_alignParentTop="true"
    android:layout_alignLeft="@+id/starbuzz1_id"
    android:layout_alignStart="@+id/starbuzz1_id"
    android:layout_marginTop="52dp" />

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/options"
    android:layout_below="@+id/starbuzz2_id"
    android:id = "@+id/list_2">

</ListView>

以下是用Java填充ListView的代码:

package com.example.android.starbuzz;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

public class TopLevelActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.top_level_activity);

 AdapterView.OnItemClickListener itemClick = new AdapterView.OnItemClickListener(){

            public void onItemClick(AdapterView <?> listView, View itemView, int position, long id){

          if(position == 0){
          Intent firstIntent = new Intent(TopLevelActivity.this, Drinks.class);
          startActivity(firstIntent);
                }
 }

        };

        ListView theList = (ListView) findViewById(R.id.list_2);
        theList.setOnItemClickListener(itemClick);

    }

}

这里的一切都很完美。当用户点击“饮料”该应用程序进入另一个活动,并显示一个带有ListView 3项(Latte,卡布奇诺,过滤器)的屏幕

以下是XML代码:

 <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id = "@+id/list_id">


    </ListView>

以下是Java中的代码,填充列表:

package com.example.android.starbuzz;

import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;

public class Drinks extends Activity {

    ListView myList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drinks);


        String [] drinks =  {"Latte", "Cappuccino", "Filter"};

        ListAdapter listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, drinks);

        myList = (ListView) findViewById(R.id.list_id);

        myList.setAdapter(listAdapter);


        AdapterView.OnItemClickListener listen = new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


                if(position == 0){


                    Intent intents = new Intent(Drinks.this, DrinkDetails.class);
                    startActivity(intents);

                }

            }
        };

       myList.setOnItemClickListener(listen);

    }



}

这就是一切都错了,当用户点击Latte应用程序崩溃时。我想要的是当用户点击Latte时,我想要开始另一个活动,以及要显示的拿铁的图片,以及拿铁的描述。

以下是我的XML代码尝试完成此任务:

<ImageView
       android:layout_width="200dp"
       android:layout_height="wrap_content"

       android:layout_marginLeft="5dp"
       android:id = "@+id/image_id"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id = "@+id/text_1_id"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id = "@+id/text_2_id"/>

以下是我在Java中填充视图的代码:

package com.example.android.starbuzz;

import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.support.annotation.DrawableRes;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;

public class DrinkDetails  extends Activity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drink_details);

    ImageView image = (ImageView) findViewById(R.id.image_id);
        image.setImageResource(R.drawable.latte_logo);

        TextView drinkName = (TextView) findViewById(R.id.text_1_id);
        drinkName.setText(R.string.latte);

        TextView drinkDescription = (TextView) findViewById(R.id.text_2_id);
        drinkDescription.setText(R.string.latteDescription);
    }
}

当我运行应用程序时,没有出现任何错误,但当用户点按“拿铁”时,应用程序崩溃。

1 个答案:

答案 0 :(得分:-1)

你可以参考这篇文章 How to handle the click event in Listview in android? 并在其上添加onItemClicklistener。 然后把你的逻辑放在这里

 lv.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            if(position == 0){

            Intent intent = new Intent(Drinks.this, DrinkDetails.class);
            startActivity(intent);

            }
        }
    });