2016-05-11 8 views
1

非常に新しい開発です!xmlのボタンをクラス内のJavaアクションにリンクする方法

私は基本的に、XMLで作成したボタンをそれぞれのクラスのJavaコードにリンクしたいと考えています。

私が達成しようとしているのは、音声記録機能が開始されると「Start Recording」というテキストを持つWebviewの上に配置されたボタンで、テキストは「Stop Recording」に変わります。

私の問題は、自分のアプリの画面にボタンがあることです。ただし、テキストは表示されず、ボタンをクリックするとアプリがクラッシュします。

次は、クラスのコードです:

public class Drugs extends AppCompatActivity { 

WebView myBrowser; 

private static final String LOG_TAG = "Recording"; 
private static String mFileName = null; 


private RecordButton mRecordButton = null; 
private MediaRecorder mRecorder = null; 

private void onRecord(boolean start) { 
    if (start) { 
     startRecording(); 
    } else { 
     stopRecording(); 
    } 
} 

private void startRecording() { 
    mRecorder = new MediaRecorder(); 
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    mRecorder.setOutputFile(mFileName); 
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

    try { 
     mRecorder.prepare(); 
    } catch (IOException e) { 
     Log.e(LOG_TAG, "prepare() failed"); 
    } 

    mRecorder.start(); 
} 

private void stopRecording() { 
    mRecorder.stop(); 
    mRecorder.release(); 
    mRecorder = null; 
} 

class RecordButton extends Button { 
    boolean mStartRecording = true; 

    OnClickListener clicker = new OnClickListener() { 
     public void onClick(View v) { 
      onRecord(mStartRecording); 
      if (mStartRecording) { 
       setText("Stop recording"); 
      } else { 
       setText("Start recording"); 
      } 
      mStartRecording = !mStartRecording; 
     } 
    }; 

    public RecordButton(Context ctx) { 
     super(ctx); 
     setText("Start recording"); 
     setOnClickListener(clicker); 
    } 
} 

public Drugs() { 
    mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    mFileName += "/audiorecordtest.3gp"; 
} 





@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_drugs); 

    myBrowser = (WebView) findViewById(R.id.mybrowser); 
    myBrowser.loadUrl("file:///android_asset/drugs.html"); 
    myBrowser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 

    Button btndrugslaw = (Button) findViewById(R.id.drugslaw); 

    btndrugslaw.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Intent intentdruglaw = new Intent(Drugs.this, DrugLaw.class); 
      startActivity(intentdruglaw); 
     } 
    }); 

} 

これは、多くの方法がありますが、XML

<ScrollView 
android:layout_height="match_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent"> 

<RelativeLayout 

xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="kyr.com.knowyourrights.Drugs" 
android:orientation="vertical" 
> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/RecordButton" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:onClick="onClick" 
    > 

</Button> 

<WebView 
    android:id="@+id/mybrowser" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 

</WebView> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/drugslaw" 
    android:text="Take me to the law" 
    android:layout_below="@id/mybrowser" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" /> 

</RelativeLayout> 


</ScrollView> 

答えて

1

ためのコードです。

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/RecordButton" 
    android:layout_above="@+id/mybrowser" 
    android:layout_alignParentTop="true" 
    android:onClick="recordClick" 
    android:layout_centerHorizontal="true"> 

、その後、あなたのクラスで

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_drugs); 

    myBrowser = (WebView) findViewById(R.id.mybrowser); 
    myBrowser.loadUrl("file:///android_asset/drugs.html"); 
    myBrowser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 

    Button btndrugslaw = (Button) findViewById(R.id.drugslaw); 

    btndrugslaw.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Intent intentdruglaw = new Intent(Drugs.this, DrugLaw.class); 
      startActivity(intentdruglaw); 
     } 
    }); 

public void recordClick(View view){ 

    // your code to handle click 
} 

} 

のために、あなたは複数のボタンがある場合

public void recordClick(View view){ 

    switch(view.getId()) 

    //HERE YOU WILL PASS THE ID OF YOUR BUTTONS 
    case R.id.firstButton: 
     //Code to handle click 
    case R.id.secondButton: 
     //Code to handle second button click 

    // AND SO ON 
} 
+0

を実装 - です(R.id.drugslaw)、録音機能を扱うボタンが1つあります。 私はコードを適切に記録すると思いますが(そうでない限り)、アプリケーションに対応する画面に入ると、記録機能のボタンは表示されません。 @アンダー – Viverson

+0

あなたはボタンが表示されていないと言っていますか? – Max

+0

ええボタンを見ることができません – Viverson

0

はXMLで

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/RecordButton" 
    android:layout_above="@+id/mybrowser" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:onClick="RecordButton" 
    android:text="Start" 
    > 
をのOnClickメソッドを追加します。 0 Javaの

Button btn = (Button) findViewById(R.id.RecordButton); 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     RecordButton(v); 
     } 
    }); 


    public void RecordButton(View v) { 
      Button b = (Button)v; 
      if(b.getText().toString().equals("Start")){ 
      onRecord(true); 
      b.setText("Stop"); 
      }else{ 
      onRecord(false); 
      b.setText("Start"); 
    } 
0
<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/RecordButton" 
    android:layout_above="@+id/mybrowser" 
    android:layout_alignParentTop="true" 
    android:onClick="recordClick" 
    android:layout_centerHorizontal="true"> 

私は新しい活動に私を取るのWebViewの底部にある2つのボタン、ボタンを一つ持っているView.OnClickLIstener

public class Drugs extends AppCompatActivity implements View.OnClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_drugs); 
    Button btndrugs = (Button) findViewById(R.id.RecordButton); 
    btndurgs.setOnClickListener(this); 
     } 
    public void onClick(View v) { 
     switch (v.getId()){ 
      case(R.id.RecordButton): 
your logic here 
    break; 
    } 
}} 
+0

私はこのとき、私のonRecordブール値を解決できません。私は、録音オーディオをクリックすると、録音オーディオをクリックした後、同じボタンのテキストが "録音を停止"に変わります。録音を停止すると、録音を停止します。 – Viverson

+0

ブール変数を静的にして変更しますテキストyour_button.setText( ""); –

関連する問題