2013-10-09 4 views
0

Я создал макет с видом меню, который будет в других макетах, показывающих некоторые кнопки. Чтобы определить эти кнопки и их действия, я создаю независимый класс, чтобы определить их все, и таким образом я избегаю необходимости определять их все снова и снова во всех действиях.Вид меню для нескольких макетов

Чтобы сделать это, сначала я создал menu_view макет:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 


    <!-- Button columns --> 
    <RelativeLayout 
     android:id="@+id/border_left" 
     android:layout_width="100dip" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:layout_alignParentLeft="true" 
     android:background="#000000" > 

     <ImageView 
      android:id="@+id/radioButton" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_weight="1" 
      android:layout_marginTop="60dp" 
      android:layout_marginLeft="10dp" 
      android:onClick="launch_radio" 
      android:src="@drawable/radio_button" /> 

     <ImageView 
      android:id="@+id/musicButton" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_weight="1" 
      android:layout_marginTop="200dp" 
      android:layout_marginLeft="10dp" 
      android:onClick="launch_media" 
      android:src="@drawable/music_button" /> 
     </RelativeLayout> 
    </RelativeLayout> 

Примечание: Здесь не все кнопки, я только положить 2, чтобы иметь представление.

После этого я создал класс MenuView, где я определяю все эти кнопки и что они делают:

public class MenuView extends RelativeLayout { 

private final LayoutInflater inflater; 

public MenuView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    inflater.inflate(R.layout.menu_view, this, true); 

    ((ImageView)this.findViewById(R.id.navButton)).setOnClickListener(launch_nav); 
    ((ImageView)this.findViewById(R.id.phoneButton)).setOnClickListener(launch_phone); 
    ((ImageView)this.findViewById(R.id.webButton)).setOnClickListener(launch_web); 
    ((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack); 
} 

private final OnClickListener launch_nav = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     getContext().startActivity(new Intent(getContext(), Navigation.class)); 
    } 
}; 

**¡¡¡THROUBLE!!!** 
private final OnClickListener launch_phone = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     public void launch_phone (String number) { 
      String numberToDial = "tel:"+number; 
     } 
     getContext().startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(numberToDial))); 
    } 
}; 

private final OnClickListener launch_web = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     getContext().startActivity(new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://www.google.es"))); 
    } 
}; 

**¡¡¡THROUBLE!!!** 
private final OnClickListener goBack = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     getContext().startActivity(new Intent(getContext(), NO.class)); 
    } 
}; 
} 

Вот где я немного потерял. Я должен определить 2 действия:

1- дозвона 2- GoBack ключ

Телефон дозвона Я не знаю, как определить это прямо здесь. Я определил другим способом, когда я впервые создавал это приложение, и он отлично работал. Но теперь, когда у меня много действий, я должен сделать это, и здесь он показывает ошибку, потому что это не способ сделать Это.

С помощью кнопки «назад» мне нужно только определить, что при нажатии этой кнопки он должен вернуться к активности, но опять же, в этом типе класса я не знаю, как его определить.

+0

Y Не делайте это с фрагментами? http://developer.android.com/guide/components/fragments.html –

+0

Ну, это может быть другим способом. Я просто новичок в этом мире андроида, и мне еще многое предстоит узнать. В любом случае, любое решение для чего я спросил? У меня много работы, и я хотел бы, чтобы она работала именно так. Тогда я посмотрю, как это сделать с фрагментами, если у меня есть время. – masmic

+0

@ A.S. просто прочитал ссылку, не может это нам, потому что я разрабатываю Android 2.3. другое решение? – masmic

ответ

0

Похоже, что с кратким обзором вашего приложения вы разделяете код за пределами действия, в котором он первоначально существовал, и теперь, что они должны быть структурированы так, чтобы они находились в отдельном объекте класса, на который нужно ссылаться. Вы уже проходите в контексте, когда строите класс, чтобы вы могли просто сохранить этот контекст, который передается, и использовать его в качестве запуска для вызова goBack. В противном случае вы вызываете goBack в контексте представления, а кнопка «Назад» связана с Activity (что идеально подходит для этого класса при его создании), поэтому вы хотите, чтобы контекст передавался вашему представлению.

private activityContext; 

public MenuView(Context context, AttributeSet attrs) { 
super(context, attrs); 

activityContext = context; 

inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
inflater.inflate(R.layout.menu_view, this, true); 

((ImageView)this.findViewById(R.id.navButton)).setOnClickListener(launch_nav); 
((ImageView)this.findViewById(R.id.phoneButton)).setOnClickListener(launch_phone); 
((ImageView)this.findViewById(R.id.webButton)).setOnClickListener(launch_web); 
((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack); 
} 

**¡¡¡THROUBLE!!!** 
private final OnClickListener goBack = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     activityContext.startActivity(new Intent(activityContext, NO.class)); 
    } 
}; 
} 
+0

Я бы предложил примеры с помощью кода. Этот код не полностью разработан мной, я начинаю со всего этого андроида, и так, как я это делал, это чтение способов достижения этого в Интернете. – masmic

+0

понял, что вы говорите, так или иначе, эта функция не завершена, поскольку вы видите, что я называю «NO.class», и это не настоящий класс, это просто способ определить его в примере, поэтому функция не является полной, и именно это я прошу – masmic

Смежные вопросы