2012-08-23 35 views
1

爲了更好的用戶界面,我想到了使用TextViews來代替按鈕。當單擊TextView時,應用程序的下一頁應該出現。我已經在XML文件中定義了onClick函數,但它不起作用。使用TextView的onClick轉到下一頁

這是XML文件。

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="16dp" 
    android:onClick="serve" 
    android:text="@string/Service" 
    android:textSize="20dp" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/textView1" 
    android:layout_below="@+id/textView1" 
    android:layout_marginTop="87dp" 
    android:onClick="complain" 
    android:text="@string/Comp" 
    android:textSize="20dp" /> 

<TextView 
    android:id="@+id/textView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/textView2" 
    android:layout_below="@+id/textView2" 
    android:layout_marginTop="121dp" 
    android:onClick="feed" 
    android:text="@string/Feedback" 
    android:textSize="20dp" /> 

的Java文件:

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    public void serve(View v) 
    { 
     Intent i=new Intent(); 
     i.setClass(this,Second.class); 
     startActivity(i); 
    } 

    public void complain(View v) 
    { 
     Intent in=new Intent(); 
     in.setClass(this,Third.class); 
     startActivity(in); 
    } 

    public void feed(View v) 
    { 
     Intent inn=new Intent(); 
     inn.setClass(this,Fourth.class); 
     startActivity(inn); 
    } 
} 
+0

是的,但是你想在「下一頁」上顯示什麼?這個代碼在哪裏? – Sam

+0

多數民衆贊成在次要的事情...什麼事是這個XML文件,甚至是D的Java文件...我已經使用適當的功能,如服務,抱怨和飼料在Java文件..onClick將去這些Java文件:) – Shreya

+0

你可以說得更詳細點嗎?不工作並沒有告訴我很多。它是拋出一個錯誤還是沒有響應觸摸事件或... – bytebender

回答

8

一個TextView默認情況下不這樣的onClick動作不能被稱爲點擊...只需添加:android:clickable="true"到每個TextViews的:

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="16dp" 
    android:clickable="true" 
    android:onClick="serve" 
    android:text="@string/Service" 
    android:textSize="20dp" /> 

按鈕和許多其他瀏覽期望的用戶交互所以它們已經是可點擊的,但不是TextView。


此外,由於你的onClick()方法執行相同的基本動作,考慮泛型方法來代替:

public void click(View v) { 
    Intent intent; 
    switch(v.getId()) { 
    case R.id.serve: // R.id.textView1 
     intent = new Intent(this, Second.class); 
     break; 
    case R.id.complain: // R.id.textView2 
     intent = new Intent(this, Third.class); 
     break; 
    case R.id.feed: // R.id.textView3 
     intent = new Intent(); 
    } 
    startActivity(intent); 
} 

您需要修改idonClick屬性在每個TextView的,就像這樣:

<TextView 
    android:id="@+id/serve" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="16dp" 
    android:clickable="true" 
    android:onClick="click" 
    android:text="@string/Service" 
    android:textSize="20dp" /> 
+0

謝謝很多:) :)它的工作.... – Shreya

0

確保你在你活動下列方法(相匹配的簽名)。他們應該分別採用View的參數。

public void serve(View v) { } 
public void complain(View v) { } 
public void feed(View v) { } 
+0

是的,我已經使用:(仍然不工作:( – Shreya

0

您的活動(根據您的代碼沒有任何onClickListeners()您需要獲取對textViews的引用然後添加一個事件處理程序,然後在您的事件處理程序中,您可以調用serve(), complain(), feed()請參閱此SO question。以下是您的活動課程變化的一個例子。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    TextView textView1 = (TextView) findViewById(R.id.TextView1); 
    textView1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     protected void onClick(View view) { 

      serve(view); 
     } 

    }); 

    //Repeat for each text view... 
} 

每個TextView中必須具備以下在XML中設置屬性:

android:onClick="onClick" 
android:clickable="true" 

編輯:

我還沒有看到你的活動工具OnclickListener如果你打算這麼做...

public class MainActivity extends Activity implements OnclickListener { 


    protected void onClick(View view) { 
     // borrowed from @Sam 
     Intent intent; 

     switch(v.getId()) { 
      case R.id.serve: // R.id.textView1 
       intent = new Intent(this, Second.class); 
       break; 
      case R.id.complain: // R.id.textView2 
       intent = new Intent(this, Third.class); 
       break; 
      case R.id.feed: // R.id.textView3 
       intent = new Intent(); 
      } 

      startActivity(intent); 
    } 

} 
+1

OP的'OnClickListeners'被稱爲'serve','抱怨'和'feed',並且清楚地顯示在問題中發佈的代碼中。問題純粹是'TextView'默認不可點擊 - Sam已經回答了這個問題。 – Squonk

+0

不需要使用intent ?? public void serve(View v) { Intent i = new Intent(); i.setClass(this,Second.class); startActivity(i); } – Shreya

+0

@Squonk watelse我可以使用? – Shreya