2016-12-16 5 views
0

私はナビゲーション・ドロワーと、製品のリストを生成するフラグメントを持っています。問題は、製品をクリックすると、フラグメントのJavaクラスではなく、ベースアクティビティでonClickメソッドが見つかるように試みることです。基本アクティビティでonClickメソッドを実装するか、フラグメントのクラスに実装する方法がありますか。NavigationDrawerアクティビティのどこでonClickメソッドを実装すればよいですか?

これは、製品のレイアウト "item_order.xml" である:ここでは

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:onClick="orderClick" 
     android:id="@+id/tOrder" 
     android:padding="4dp"> 
.... 
</RelativeLayout> 

は、基本クラスである:ここで

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_waiter); 

     //set fragment 

     OrdersFragment fragment=new OrdersFragment(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_container,fragment); 
     fragmentTransaction.commit(); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     OrdersFragment.wa=this; 
} 

は、フラグメントである:

public class OrdersFragment extends Fragment { 
    private Database db; 
    private ArrayList<Order> orders=new ArrayList<Order>(); 
    private OrderAdapter adapter; 
    private ListView listOrders; 
    public static WaiterActivity wa; 
    public OrdersFragment() { 
     // Required empty public constructor 
    } 


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

     View view = inflater.inflate(R.layout.fragment_orders, container, false); 

     // Inflate the layout for this fragment 
     db = new Database(); 
     db.createNewOrderListener(this); 
     ListView listOrders = (ListView) view.findViewById(R.id.ordersList); 
     adapter = new OrderAdapter(this.getContext(), R.layout.item_order, orders); 

     listOrders.setAdapter(adapter); 



     return view; 
    } 
+1

完全なコードを貼り付けてください。 –

+2

xmlオブジェクトのみがonClickメソッドを使用している場合は、xmlからonclickを使用しないで、.java側からsetOnClickListenerを使用してください。その理由は次のとおりです。onClickは、アプリケーション全体ではなく、xmlにリンクされたjava内のメソッドを検索します。 Btw、完全なコードを@BhavinShahとして投稿すると –

+0

正しいLayoutInflaterを使用していることを確認してください。 – Qamar

答えて

1

私はあなたのリストビュー項目の選択について話していると思います。 まず、あなたからxmlのonClickを削除してください。関数orderを作成して基本アクティビティを作成し、次にフラグメント化してonItemClickリスナをリストビューに追加します。

listOrders.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       if (getActivity() instanceof "your base activity"){ 
        (("your base activity")getActivity()).orderClick(); 
       } 
      } 
     }); 
0

あなたが活動を呼び出す必要がありますフラグメントクラスで呼び出してアクションを実行し、呼び出されたアイテムのitemIndexを渡すメソッドです。

0
あなたの活動の

使用setOnItemClickListener、そこだけからのフラグメントを呼び出し、: -

mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Fragment fragment = null; 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    switch (position) { 
     case 0: 
      fragment = new ProgramFragment(); 

      break; 

     case 1: 
      fragment = new FeedbackFragment(); 

      break; 
     case 2: 

      fragment = new ShareFragment(); 


      break; 
     case 3: 
      fragment = new LogOutFragment(); 

      break; 

     default: 
      fragment =null; 
    } 


    if (fragment != null) { 

      fragmentManager.beginTransaction().replace(R.id.main_fragment_container, fragment).commit(); 


    } 


    mDrawerList.setItemChecked(position, true); 
    drawerLayout.closeDrawer(mDrawerList); 
      } 
     }); 
+0

フラグメント間を移動することではありません。あるフラグメントでは、製品のリストがあります。そのうちの1つをクリックすると、フラグメントのクラスに実装されているonClickメソッドが表示されません。 –

+0

そのためには、製品のリストを持つそのフラグメント内のlistview.setOnItemClickListenerを使用する必要があります – Nainal

関連する問題