【问题标题】:how to get data from Intent Activity and button activated in ListView如何从 Intent Activity 和 ListView 中激活的按钮获取数据
【发布时间】:2012-01-12 10:15:57
【问题描述】:

您好,感谢您阅读本文!请帮帮我。

我正在尝试创建一个餐厅应用程序,该应用程序在菜单中显示 3 个按钮,然后单击显示食物列表的食物按钮,然后客户可以选择他们想要订购的食物,然后将订单发回第一页.我读了很多文章,有人说使用 listview.setItemsCanFocus(true) 但我在理解它来实现它时遇到了问题。有人说getView中的按钮监听器但是当我实现我的程序时只是挂起。请帮我。谢谢。

我的菜单:

这是我的食物(第二)页

我遇到了问题:

  1. 将所选数据(食品订单)数组从 food.class 传回我的主类,即 restaurant.class

  2. 在列表中添加按钮后,食物不可点击(整行食物)。

  3. 点击图片放大及其他地方(图片除外)

我的主要课程(餐厅)

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

}


public void foodMenu(View v){
    startActivity(new Intent(SesameRestaurant.this,Food.class));

    //setContentView(R.layout.foods);
}

public void drinkMenu(View v){startActivity(new Intent(SesameRestaurant.this,Drink.class));}
public void billMenu(View v){}

}

我的第二堂课(food.class)

package com.restaurant.sesame;

 public class Food extends ListActivity {
private LayoutInflater mInflater;
private Vector<RowData> data;
RowData rd; 


static final String[] title = new String[] {
            "Cow Rib steak", 
            "Thai Prawn Fried Rice",    
            "Christmas Sensation Delight",
            "Salmon Steak"      };

static final String[] detail = new String[] {
                "1h 37m Shipping: $10.00",
                "1h 39m Shipping: Free",
                "58m 6s Shipping: $10.00",
                "59m 30s Shipping: $10.95"  };

private Integer [] imgid = { R.drawable.food1, R.drawable.food2, R.drawable.food3, R.drawable.food4 };


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.foods);

    mInflater = (LayoutInflater) getSystemService(
            Activity.LAYOUT_INFLATER_SERVICE);
            data = new Vector<RowData>();
            for(int i=0;i<title.length;i++){
            try {
                rd = new RowData(i,title[i],detail[i]);
                } catch (ParseException e) {
                    e.printStackTrace();
               }
               data.add(rd);
            }
               CustomAdapter adapter = new CustomAdapter(this, R.layout.list, R.id.title, data);
               setListAdapter(adapter);
               getListView().setTextFilterEnabled(true);

}

 public void onListItemClick(ListView parent, View v, int position, long id) {          
     Log.w("my app", "Click list Item!!!"); 
     Toast.makeText(getApplicationContext(), "You have selected "+(position+1)+"th item",  Toast.LENGTH_SHORT).show();
 }

 public void orderClick(View v){


 }

 private class RowData {
        protected int mId;
        protected String mTitle;
        protected String mDetail;

     RowData(int id,String title,String detail)
     {
                mId=id;
                mTitle = title;
                mDetail=detail;
     }

     @Override
     public String toString() {
         return mId+" "+mTitle+" "+mDetail;
     }
 }

 private class CustomAdapter extends ArrayAdapter<RowData> {
     public CustomAdapter(Context context, int resource, int textViewResourceId, List<RowData> objects) {               
         super(context, resource, textViewResourceId, objects);
     }

     @Override
     public View getView(int position, View convertView, ViewGroup parent) {   
         ViewHolder holder = null;
         TextView title = null;
         TextView detail = null;
         ImageView i11=null;
         RowData rowData= getItem(position);
         if(null == convertView){
                convertView = mInflater.inflate(R.layout.list, null);
                holder = new ViewHolder(convertView);
                convertView.setTag(holder);
         }
         holder = (ViewHolder) convertView.getTag();
         title = holder.gettitle();
         title.setText(rowData.mTitle);
         detail = holder.getdetail();
         detail.setText(rowData.mDetail);                                                     
         i11=holder.getImage();
         i11.setImageResource(imgid[rowData.mId]);


         return convertView;
     }

     private class ViewHolder {
         private View mRow;
         private TextView title = null;
         private TextView detail = null;
         private ImageView i11=null; 
         public ViewHolder(View row) {
             mRow = row;
         }

         public TextView gettitle() {
             if(null == title){
                 title = (TextView) mRow.findViewById(R.id.title);
             }
             return title;
         }     

         public TextView getdetail() {
             if(null == detail){
                 detail = (TextView) mRow.findViewById(R.id.detail);
             }
             return detail;
         }
         public ImageView getImage() {
             if(null == i11){
                 i11 = (ImageView) mRow.findViewById(R.id.img);
             }
             return i11;
         }
     }
 }


 public void backClick(View v){
    finish(); 
 }

}

我的食物菜单界面foods.xml

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

<Button  
        android:layout_height="wrap_content"  
        android:text="Back"  
        android:onClick="backClick"  
        android:layout_width="fill_parent">  
</Button> 

我的列表.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
    <ImageView  android:id="@+id/img"
                android:scaleType="centerCrop"
                android:layout_width="100dp"
                android:layout_height="100dp"/>
    <LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
                    android:orientation="vertical"
                    android:paddingLeft="10dp"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content">
        <TextView
            android:layout_width="fill_parent"
            android:id="@+id/title"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textColor="#ffffff"
            android:textSize="16sp" />
        <TextView
            android:layout_width="fill_parent"
            android:id="@+id/detail"
            android:textColor="#ffffff"
            android:layout_height="wrap_content"/>

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/quantity"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Quantity :"
                android:textColor="#ffffff" />

            <EditText
                android:id="@+id/quantityInput"
                android:layout_width="wrap_content"
                android:layout_height="35dp"
                android:layout_toRightOf="@id/quantity"
                android:hint="1-10"
                android:paddingLeft="10dp"
                android:textSize="12dp" />

            <Button
                android:id="@+id/order"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="120dp"
                android:layout_toRightOf="@id/quantity"
                android:onClick="orderClick"
                android:text="Order"
                android:textSize="12dp" />

        </RelativeLayout>
    </LinearLayout>

【问题讨论】:

    标签: android button android-intent android-activity


    【解决方案1】:

    要传回数据,您可以通过以下方式启动 food.class 活动:

    startActivityForResult();
    

    使用以下方法将数据放回意图中:

    getIntent().putExtra()
    

    至于 ListView 的项目无法点击的问题......那里有很多“答案”,但最简单的是在每一行中设置所有小部件,以便属性具有

    android:focusable="false" android:focusableInTouchMode="false"
    

    【讨论】:

    • 更多信息请访问:developer.android.com/reference/android/app/Activity.html,位于标题为“开始活动并获得结果”的顶部部分下
    • 我很困惑我应该把 android:focusable="false" android:focusableInTouchMode="false" 放在哪里?
    • 行布局中每个小部件的 XML。
    • 如果我添加到所有小部件(是否需要包括线性布局?),我的编辑文本将变得不可编辑,我的按钮也不可点击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多