Использование imageView в качестве кнопки для навигации между макетами - PullRequest
0 голосов
/ 15 февраля 2012

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

Я изменился следующим образом ..

<ImageView
            android:id="@+id/telugu"
            android:layout_width="130dp"
            android:layout_height="25dp"
            android:layout_x="-34dp"
            android:layout_y="315dp"
            android:clickable="true"
            android:onClick="myClickHandler"

и myClickHandler это ..

public void myClickHandler(View view) {
      switch (view.getId()) {
      case R.id.arts:
           setContentView(R.layout.arts);
     case R.id.music:
         setContentView(R.layout.music);

Проблема в том, что я не могу перейти на конкретный макет. Это будет один и тот же макет, независимо от того, какое изображение я выберу.

Ответы [ 4 ]

3 голосов
/ 15 февраля 2012

Ваш оператор коммутатора неверен

switch (view.getId()) {
      case R.id.arts:
           setContentView(R.layout.arts);
     case R.id.music:
         setContentView(R.layout.music);
}

должен быть

switch (view.getId()) {
      case R.id.arts:
           setContentView(R.layout.arts);
           break;
     case R.id.music:
         setContentView(R.layout.music);
         break;
}

Вы не ставите разрывы в своем коммутаторе, что позволяет вашему коммутатору переходить к следующему оператору.Это означает, что метод setContentView, который вы вызываете, всегда будет нижним в вашем переключателе.Добавьте туда "break;", которые я показал, и вам будет хорошо пойти

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

Проблема заключается в управлении данными на экране при простом вызове setContentView.Если у вас есть макет с 2 кнопками на экране, а затем вы переключаетесь на одну с 3 кнопками на экране, вы должны как-то различать эти макеты в своем коде.В этом случае использование совершенно нового вида деятельности будет лучшим вариантом.Меньше логического кода и в целом проще в управлении.Тем не менее, я уверен, что есть случаи, когда вызов setContentView более одного раза в одном и том же упражнении является подходящим ответом

2 голосов
/ 15 февраля 2012

Вы должны создать другой класс для этого XML-файла. так что у вас будет файл arts.java arts.xml, music.java music.xml. затем позвоните и намеревайтесь перейти к этой деятельности

    ImageView buttonLA = (ImageView) findViewById(R.id.buttonLouisiana);
    buttonLA.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent myIntent = new Intent(arts.this, music.class);
            startActivityForResult(myIntent, 0);
        }
    });
0 голосов
/ 16 февраля 2012

создать отдельные классы для этого. Вы можете использовать действие Imageview OnClcikListener, как это.

ImageView iv = (ImageView) findViewById (R.id.imageView1); iv.setOnClickListener (new OnClickListener () {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent iv=new Intent();
            iv.setClass(getApplicationContext(), art.class);
            startActivity(iv);
        }
    });
0 голосов
/ 15 февраля 2012

Вам не разрешено , вы можете вызывать setContentView () более одного раза за действие, @dymmeh прав в том, что ваши операторы break являются проблемой.

Я думаю, вам все равно стоит подумать: либо использовать что-то вроде ViewSwitcher , чтобы изменить макеты, которые вы показываете в одном приложении. Или разделите ваши различные макеты на их собственные действия, это может иметь дополнительное преимущество, заключающееся в том, что ваше приложение будет «приятно играть» с помощью кнопки «назад».

Вот хороший учебник по переключению вида , если вы выберете этот путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...