2017-03-14 21 views
-2

私の最初のアンドロイドアプリで作業しているので、私と一緒に裸です!フラグメント内のテキストを編集

私はフラグメントをクリックしたときにテキストフィールドをインクリメントするようにしようとしています。私はフラグメントを使用していませんが、フラグメント化していないと問題はありません。

非常に基本的なテストアプリを作成しました。ありがとう。

t1は値をnumOfClicksに設定することになっていますが、デバッグではt1のvaslusは常にnullです。

private int numOfClicks; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 

    View v = inflater.inflate(R.layout.page1, container,false); 

    Button button1 = (Button) v.findViewById(R.id.btn1); 
    button1.setOnClickListener(this); 

    Button button2 =(Button)v.findViewById(R.id.btn2); 
    button2.setOnClickListener(this); 


    // EditText t1 = (EditText)v.findViewById(R.id.numClicked); 
    // t1.setOnClickListener(this); 

    return v; 
} 

@Override 
public void onClick(View v) 
{ 
    switch (v.getId()) { 
     case R.id.btn1: 
      //button code here 
      //toast statement works! 
      //Toast.makeText(v.getContext(), "yeah", Toast.LENGTH_SHORT).show(); 

      EditText t1 = (EditText)v.findViewById(R.id.numClicked); 
      numOfClicks++; 
      t1.setText(Integer.toString(numOfClicks)); 


      break; 
     case R.id.btn2: 
      Toast.makeText((v.getContext()), "button 2 pressed", Toast.LENGTH_SHORT).show(); 
      break; 
    } 
} 
+0

ちょうどそれが –

答えて

1

グローバルのEditTextを宣言します。onCreateViewで

EditText t1 ; 

初期化():

t1 = (EditText)v.findViewById(R.id.numClicked); 

のonClickのSetテキスト():

t1.setText(Integer.toString(numOfClicks)); 
+1

ありがとうonCreateView作るのonClickからv.findViewById(R.id.numClicked)を削除!それは今働く! – branedge

+0

あなたはウェルカムです。 :) – tahsinRupam

0

あなたnumOfClicksが値を持っていませんあなたが宣言しただけで始まります設定値ではありません。 numOfClicks = 0の場合はnull

ので、答えが設定された値を=

  • numOfClicks ++(ヌル+1);:= nullを

    1. numOfClicks:

      は、あなたのプログラムステップ

  • 1

    page1.xmlにnumClickedという名前のeditTextを宣言する必要があります。

    {

    private int numOfClicks; 
    private EditText t1; 
    
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    
        View v = inflater.inflate(R.layout.page1, container, false); 
    
        Button button1 = (Button) v.findViewById(R.id.btn1); 
        button1.setOnClickListener(this); 
    
        Button button2 = (Button) v.findViewById(R.id.btn2); 
        button2.setOnClickListener(this); 
    
    
        t1 = (EditText) v.findViewById(R.id.numClicked); 
    
        return v; 
    } 
    
    @Override 
    public void onClick(View v) { 
        switch (v.getId()) { 
         case R.id.btn1: 
          //button code here 
          //toast statement works! 
          //Toast.makeText(v.getContext(), "yeah", Toast.LENGTH_SHORT).show(); 
    
    
          numOfClicks++; 
          t1.setText(Integer.toString(numOfClicks)); 
    
    
          break; 
         case R.id.btn2: 
          Toast.makeText((v.getContext()), "button 2 pressed", Toast.LENGTH_SHORT).show(); 
          break; 
        } 
    } 
    

    }

    +0

    ありがとう!それは今働く! – branedge

    +0

    あなたは大歓迎です^^ –

    0

    ビューvonClick()にあなたが上.findViewByIDを呼び出している、実際に(も図である)クリックされたボタン

    です:その後、あなたは、このコードを試すことができます

    テキストフィールドを検索するには、アクティビティ別のビューを見つける必要があります。あなたはhttp://jakewharton.github.io/butterknife/ を使用することができますのEditText

    0

    からどのボタンが異なっているコンテナ内でない限り、あなたはV .getParrent()を呼び出すことによって得ることができる必要があります次に、あなたとしてそれを宣言することができます。 @BindView(R.id.numClicked) EditText text;

    もそうint numOfClicks = 0;を宣言それは最初から値を持っています。

    そしてまた、このようなリスナー設定:

    @OnClick(R.id.btn1) 
    public void submit(View view) { 
        numOfClicks++; 
         text.setText(Integer.toString(numOfClicks)); 
    } 
    

    そして、あなたのOnCreateイベントであなたはこれだけ持っている: ButterKnife.bind(this);

    ビューは、コンパイルに作成されているので、これは、通常のfindViewByIDよりも優れているが、 onCreateで自動的にアクティビティ内に挿入され、標準の初期化よりも効率的です。このように、ビューはグローバルに宣言されているため、アクティビティのどこからでも使用できます。

    1

    なぜか

    • パラメータビューは、onClick(画面上でタッチ)されているあなたのビューです。このビューには、他のコンポーネントはありません。

    詳細:EditText t1 =(EditText)v.findViewById(R.id.numClicked);

    @Override 
        public void onClick(View v) 
        { 
         switch (v.getId()) { 
          case R.id.btn1: 
           //button code here 
           //toast statement works! 
           //Toast.makeText(v.getContext(), "yeah", Toast.LENGTH_SHORT).show(); 
    
           EditText t1 = (EditText)v.findViewById(R.id.numClicked); 
           numOfClicks++; 
           t1.setText(Integer.toString(numOfClicks)); 
    
    
           break; 
          case R.id.btn2: 
           Toast.makeText((v.getContext()), "button 2 pressed", Toast.LENGTH_SHORT).show(); 
           break; 
         } 
        } 
    

    何ですか?

    • onViewCreatedイベントであなたのコンポーネント参照して下さい。しかし、なぜ? onViewCreated(表示ビュー、@ Nullable Bundle savedInstanceState)、ビューパラメータは、このレイアウトのすべてのコンポーネントを持っています。

      @Override 
      public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
          super.onViewCreated(view, savedInstanceState); 
          t1 = (EditText)v.findViewById(R.id.numClicked); 
      } 
      
    • いけないを忘れてしまった:あなたはこの例を実行するには、名前のT1でのEditText入力し、クラスatributeを作成する必要があります。

    関連する問題