2014-10-12 75 views
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> 

的问题是(你可能已经看到)我不能比较(检查字符串)非内部类中的最终变量。所以,请帮助我,如果你认为我的整个想法是错误的,那么建议我适当的方式。

(如果其他文件需要然后告诉我,我会编辑)

编辑

有什么毛病我的逻辑。当我第一次按'解决'时,它转向'后退'。但是当我按下“返回”时,它不会转向“解决”。我想解决>返回>解决>返回...我错过了什么? (可能是增加/替换交易?)

+0

定义全局视图..不需要处理最终.. – Ranjit 2014-10-12 08:29:53

+2

如果按钮除此之外没有其他用途,则不需要声明它为final或全局声明它。只需使用'onClick'中的参数'view'即可。 'view'有'Button'本身 – Panther 2014-10-12 08:33:38

+0

我的逻辑有问题。当我第一次按'解决'时,它转向'后退'。但是当我按下“返回”时,它不会转向“解决”。我想解决>返回>解决>返回...我错过了什么? (也许在添加/替换交易?) – ajay 2014-10-12 09:09:40

回答

1

if(check.equals("SOLVE"))替换为if(((Button)v).getText().toString().equals("SOLVE"))

要设置一个新的文本使用这种 ((Button)v).setText("YourText")

OnClick的观点越来越被作为参数传递是Button本身。因此,您可以将视图操作为Button并设置或获取其属性

+0

雅!它的工作!但仍然存在问题。setText(“BACK”) – ajay 2014-10-12 08:27:45

+0

此答案已被标记为低质量答案,请提供一些解释 – 2014-10-12 08:28:41

+1

不要在'onClick'侦听器中使用'a'。使用作为参数传递的'view' – Panther 2014-10-12 08:35:10

1

为了能够在某些方法中创建的匿名类内部访问变量a(您的Button),您需要声明变量final。例如:

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

check(你的字符串)最终也一样,因为它是在匿名类也可用于:

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

非常感谢。它工作正常。 – ajay 2014-10-12 08:30:46

+0

如果他为了更多的用途而在全球范围内宣布它将是一件好事。 – Shvet 2014-10-12 08:31:35

+0

@DhavalGondaliya OP没有说全球使用这个变量。此外,他给出的代码并不意味着这一点。我不明白那是怎么样的*好* :)只是增加了不必要的代码行。 – Simas 2014-10-12 08:33:29

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")){