0

Я изучаю Android и придерживался этого. Я хочу сделать проект в Android. В MainActivity у меня есть кнопка и вы хотите установить событие onClick() таким образом, чтобы нажимать его, если текст кнопки «SOLVE», затем добавьте фрагмент «Выход» и измените имя кнопки на «BACK», и если текст кнопки «BACK», то добавьте фрагмент Input и измените текст Button на «SOLVE».Как изменить Фрагмент в Android

Вот мой код MainActivity.java

package com.example.sudokusolver; 

import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends ActionBarActivity { 
Button a   
String check ; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     a=(Button) findViewById(R.id.press); 
     check=a.getText().toString(); 


     a.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v){ 

       if(check.equals("SOLVE")){ 

        Output OP=new Output(); 

        FragmentManager fragmentManager = getFragmentManager(); 
        FragmentTransaction ft = 
        fragmentManager.beginTransaction(); 

        ft.add(R.id.frag,OP); 

        ft.commit(); 

        a.setText("BACK"); 
       } 
       else 
       { 
        Input IP=new Input(); 

        FragmentManager fragmentManager = getFragmentManager(); 
        FragmentTransaction ft = 
        fragmentManager.beginTransaction(); 

        ft.add(R.id.frag,IP); 

        ft.commit(); 

        a.setText("SOLVE"); 

       } 

      } 
     }); 

    } 

} 

здесь main_activit.xml файлу

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


    <FrameLayout 
     android:id="@+id/frag" 
     android:layout_weight="1" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     /> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="90dp"> 

     <Button 
      android:id="@+id/press" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:text="@string/show" /> 

    </RelativeLayout> 

</LinearLayout> 

Проблема заключается в том (вы, возможно, видели), я не могу сравнить (проверка строка) не -строчная переменная внутри внутреннего класса. Поэтому, пожалуйста, помогите мне в этом, и если вы думаете, что моя идея неправильная, то предложите мне правильный путь.

(если другие файлы требуют, то скажите мне, я буду редактировать)

EDIT

Существует что-то не так с моей логикой. когда я сначала нажимаю «Решить», он поворачивается к «Назад». Но когда я нажимаю «Назад», он не переходит к «Решать». Я хочу Решить> Назад> Решить> Назад ... Я что-то упустил? (возможно, в сделке с добавлением/заменой?)

+0

определите виды по всему миру .. не нужно обрабатывать окончательные .. – Ranjit

+2

Если кнопка не имеет смысла, кроме этого, не нужно объявлять ее «final» или объявлять ее глобально. Просто используйте 'view' из аргументов в' onClick'. В 'view' есть сама' Button' – Panther

+0

В моей логике что-то не так. когда я сначала нажимаю «Решить», он поворачивается к «Назад». Но когда я нажимаю «Назад», он не переходит к «Решать». Я хочу Решить> Назад> Решить> Назад ... Я что-то упустил? (возможно, в транзакции add/replace?) – ajay

ответ

1

Заменить if(check.equals("SOLVE")) на if(((Button)v).getText().toString().equals("SOLVE")).

Чтобы установить новый текст использовать этот ((Button)v).setText("YourText")

В OnClick вид становится передается в качестве аргумента является сам Button. Таким образом, вы можете манипулировать видом как Button и установить или получить его свойства

+0

Ya it works! но по-прежнему существует проблема с a.setText («BACK») – ajay

+0

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

+1

не используйте 'a' внутри слушателя' onClick'. Используйте 'view', который передается как аргументы – Panther

1

Чтобы иметь возможность доступа к переменной a (ваша кнопка) внутри анонимных классов, созданных каким-то методом, вам нужно объявить переменную final. Пример:

final Button a = (Button) findViewById(R.id.press); 

Сделать check (ваша строка) финал тоже, как он используется в анонимном классе также:

final String check = a.getText().toString(); 
+0

Большое спасибо. Он работает нормально. – ajay

+0

Будет хорошо, если он объявит его глобально для большего использования. – Shvet

+0

@DhavalGondaliya OP ничего не сказал об использовании этой переменной во всем мире. Кроме того, его данный код не подразумевает этого. Я не вижу, как это * хорошо * :) Просто добавляет ненужную строку кода. – Simas

0

Определите кнопку в качестве переменной класса, как

public class MainActivity extends ActionBarActivity { 
Button a; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    a =(Button) findViewById(R.id.press); 

и сравнить в слушателе как

if(a.getText().toString().equals("SOLVE")){ 
Смежные вопросы