2016-05-22 4 views
1

ImageViewをクリックすると、新しいアクティビティの開始を手伝うことができます。下に表示されているコードスニペットがあります。ImageViewのOnClickListenerをフラグメントに実装するにはどうすればよいですか?

public class TabFan extends Fragment { 

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

    //Returning the layout file after inflating 
    //Change R.layout.tab1 in you classes 
    return inflater.inflate(R.layout.tab_fan, container, false); 

    // Onclick Listening 
    ImageView image = (ImageView) findViewById(R.id.image); 
    image.setOnClickListener(this); 


} 
public void onClick(View v) { 

    // Launching new Activity on hitting the image 
    Intent j = new Intent(getApplicationContext(), Activity2.class); 
    startActivity(j); 
    // End intent 
} 

}

[OK]を私は3つのタブ、右取り組んでいる次のコントロールに私のタブを使用してコードを持っています。

public class Fans extends AppCompatActivity implements TabLayout.OnTabSelectedListener{ 

//This is our tablayout 
private TabLayout tabLayout; 

//This is our viewPager 
private ViewPager viewPager; 
ImageView image; 

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

    //Adding toolbar to the activity 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    //Initializing the tablayout 
    tabLayout = (TabLayout) findViewById(R.id.tabLayout); 

    //Adding the tabs using addTab() method 
    tabLayout.addTab(tabLayout.newTab().setText("Fans")); 
    tabLayout.addTab(tabLayout.newTab().setText("Jersey")); 
    tabLayout.addTab(tabLayout.newTab().setText("Team")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    //Initializing viewPager 
    viewPager = (ViewPager) findViewById(R.id.pager); 

    //Creating our pager adapter 
    Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount()); 

    //Adding adapter to pager 
    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 



} 

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 

} 

@Override 
public void onTabReselected(TabLayout.Tab tab) { 

} 

}

私は別のクラスのページャ

public class Pager extends FragmentStatePagerAdapter { 

//integer to count number of tabs 
int tabCount; 

//Constructor to the class 
public Pager(FragmentManager fm, int tabCount) { 
    super(fm); 
    //Initializing tab count 
    this.tabCount= tabCount; 
} 

//Overriding method getItem 
@Override 
public Fragment getItem(int position) { 
    //Returning the current tabs 
    switch (position) { 
     case 0: 
      TabFan tab1 = new TabFan(); 
      return tab1; 
     case 1: 
      TabJersey tab2 = new TabJersey(); 
      return tab2; 
     case 2: 
      TabTeam tab3 = new TabTeam(); 
      return tab3; 
     default: 
      return null; 
    } 
} 

//Overriden method getCount to get the number of tabs 
@Override 
public int getCount() { 
    return tabCount; 
} 

}

今まさにSH最後に興味を持って生クラスTabFanを、持っていますそのリスナーを実装する必要があります。私はクラスのファンを試みたが、明らかにいくつかの圧倒を取得している、TabFanもイベントで動作していないようです。助けてください。あなたははCtrl +スペースキーをクリックした場合

public class TabFan extends Fragment { 

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

    //Returning the layout file after inflating 
    //Change R.layout.tab1 in you classes 
    return inflater.inflate(R.layout.tab_fan, container, false); 

    // Onclick Listener 
} 

}

+2

java 101: 'return'ステートメントの後にコードを書くことはできません。 – njzk2

+0

@ njzk2これは正しい方法です、あなたはとても気配りしています。 +1 –

+0

@ njzk2質問を編集しました。適切なポジションについての親切な助言イベントリスナーを設定することができます。私は間違ったセクションにコードを入れているかもしれないと思います。 – Brian

答えて

1

提供したコードでは、imageオブジェクトを書いたonClick()メソッドに正しくリンクするには、2つのことを行う必要があります。

最初に、FragmentクラスはView.OnClickListenerインターフェイスを実装する必要があります。これは、setOnClickListener(this)を使用すると、クリックで実際にonClick(View v)がアクティブになるのです。あなたのクラス宣言の行を置き換えます

@Override 
public void onClick(View v) { 
    if (v.getId() == R.id.image) { 
     // Launching new Activity on hitting the image 
     Intent j = new Intent(getActivity().getApplicationContext(), Activity2.class); 
     startActivity(j); 
     // End intent 
    } 
} 
:あなたは setOnClickListener(this)TabFanに任意のより多くのクリック可能なオブジェクトを追加しようとしている場合は、

public class TabFan extends Fragment implements View.OnClickListener { 

第二に、そしてonClick(View v)は、それが予想されるビューを扱っていることを確認する必要があります

+0

私はちょうどあなたのコードを配置したようですが、一見、いくつかの非互換性の問題があります。フラグメント内のメソッドgetApplicationContext()を解決できません。どんな方法でも、やり方を進めるか固定することができます... – Brian

+0

上記のように、フラグメント内でアクティビティ参照を最初に取得し、そこからアプリケーションコンテキストを取得する必要があります。 – eskimwier

2

Android Studioはあなたの提案のウィンドウを表示し、あなたのためのonClickなどのオーバーライドメソッドが生成されます。あなたがどこ

image.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent j = new Intent(getActivity(), Activity2.class); 
      startActivity(j); 
     } 
    }); 

FragmentまたはActivityでは、問題ではありません。 ImageViewはちょうどView.OnClickListenerが必要です。クリックイベントを検出するためにonClickメソッドをオーバーライドします。

そして、あなたはすでにこのようなXMLでのonClickを設定している私は何をしたいの断片の使用getActivity()またはgetActivity().getApplicationContext()

+0

それは完全に問題ではない、ここに – njzk2

+0

@ njzk2あなたが正しいと思います。ただ彼を導きたい。 –

1

のあらゆるcontextを必要とする他のポイント:

<ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="yourMethod" 
     android:src="@drawable/yourpicture"/> 

次に、あなたのフラグメントに新しいアクティビティを開くためにyourMethodを実装するだけです:

public void yourMethod(View v) { 
    Intent intent = new Intent(this, ToOpenAcitivy.class); 
    startActivity(intent); 
} 

this site helpedこのようなことについて学ぶときは私にはたくさんのことがあります。

関連する問題