Android 如何从DataAdapter调用片段?

Android 如何从DataAdapter调用片段?,android,Android,Ihis是我的适配器,名为TicketAdapter.java public class TicketAdapter extends ArrayAdapter<Ticket> { protected static final String LOG_TAG = TicketAdapter.class.getSimpleName(); private List<Ticket> items; private int l

Ihis是我的适配器,名为TicketAdapter.java

    public class TicketAdapter extends ArrayAdapter<Ticket> {

        protected static final String LOG_TAG = TicketAdapter.class.getSimpleName();

        private List<Ticket> items;
        private int layoutResourceId;
        private Context context;

        public TicketAdapter(Context context, int layoutResourceId, List<Ticket> items) {
            super(context, layoutResourceId, items);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
                TicketHolder holder = null;
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new TicketHolder();
            holder.ticket = items.get(position);
            holder.removeTicketButton = (ImageButton)row.findViewById(R.id.ticket_remove);
            holder.removeTicketButton.setTag(holder.ticket);
            holder.settingTicketButton=(ImageButton)row.findViewById(R.id.ticket_setting);
            holder.settingTicketButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                Fragment freeFragment = new FreeFragment();
                if (freeFragment != null)
                    switchFragment(freeFragment);

                Log.e("adapter_click_setting","adapter_click_setting");

                }
            });


            holder.name = (TextView)row.findViewById(R.id.ticket_name);
            setNameTextChangeListener(holder);
            row.setTag(holder);
            setupItem(holder);
            return row;
        }
    private void switchFragment(Fragment newFragment)
    {

        if (context == null)
        {
            Log.e("null_context","nulllll");
             return;
        }
        if (context instanceof AddNewTicket) {
            Log.e("meth_calling","method_calling");
             AddNewTicket feeds = (AddNewTicket) context;
             feeds.switchContent(newFragment);  
        }
   }
    private void setupItem(TicketHolder holder) {
        holder.name.setText(holder.ticket.getName());       
    }

    public static class TicketHolder 
    {
        Ticket ticket;
        TextView name;
        ImageButton settingTicketButton;
        ImageButton removeTicketButton;
    }

    private void setNameTextChangeListener(final TicketHolder holder) {
        holder.name.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                holder.ticket.setName(s.toString());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            @Override
            public void afterTextChanged(Editable s) { }
        });
    }
public class TicketAdapter extends ArrayAdapter<Ticket> {

        protected static final String LOG_TAG = TicketAdapter.class.getSimpleName();

        private List<Ticket> items;
        private int layoutResourceId;
        private Context context;

        public TicketAdapter(Context context, int layoutResourceId, List<Ticket> items) {
            super(context, layoutResourceId, items);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
                TicketHolder holder = null;
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new TicketHolder();
            holder.ticket = items.get(position);
            holder.removeTicketButton = (ImageButton)row.findViewById(R.id.ticket_remove);
            holder.removeTicketButton.setTag(holder.ticket);
            holder.settingTicketButton=(ImageButton)row.findViewById(R.id.ticket_setting);
            holder.settingTicketButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                Fragment freeFragment = new FreeFragment();
                if (freeFragment != null)
                    switchFragment(freeFragment);

                Log.e("adapter_click_setting","adapter_click_setting");

                }
            });


            holder.name = (TextView)row.findViewById(R.id.ticket_name);
            setNameTextChangeListener(holder);
            row.setTag(holder);
            setupItem(holder);
            return row;
        }
    private void switchFragment(Fragment newFragment)
    {

        if (context == null)
        {
            Log.e("null_context","nulllll");
             return;
        }
        if (context instanceof AddNewTicket) {
            Log.e("meth_calling","method_calling");
             AddNewTicket feeds = (AddNewTicket) context;
             feeds.switchContent(newFragment);  
        }
   }
    private void setupItem(TicketHolder holder) {
        holder.name.setText(holder.ticket.getName());       
    }

    public static class TicketHolder 
    {
        Ticket ticket;
        TextView name;
        ImageButton settingTicketButton;
        ImageButton removeTicketButton;
    }

    private void setNameTextChangeListener(final TicketHolder holder) {
        holder.name.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                holder.ticket.setName(s.toString());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            @Override
            public void afterTextChanged(Editable s) { }
        });
    }
这是我的主要活动AddNewTicket.java

 public class AddNewTicket extends Activity {
    private TicketAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ticket_listview);
        setupListViewAdapter();
        setupAddTicketButton();
    }

    public void removeTicketOnClickHandler(View v) 
    {
        Ticket itemToRemove = (Ticket)v.getTag();
        adapter.remove(itemToRemove);
    }

    private void setupListViewAdapter() 
    {
        adapter = new TicketAdapter(AddNewTicket.this, R.layout.ticket_list_item, new ArrayList<Ticket>());
        ListView TicketListView = (ListView)findViewById(R.id.ticketlist);
        TicketListView.setAdapter(adapter);
    }

    private void setupAddTicketButton() {
        findViewById(R.id.free).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                adapter.insert(new Ticket(""), 0);
            }
        });

        findViewById(R.id.paid).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                adapter.insert(new Ticket(""), 0);
            }
        });

        findViewById(R.id.donation).setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        adapter.insert(new Ticket(""), 0);
                    }
            });
    }

}
     public class AddNewTicket extends FragmentActivity {
        private TicketAdapter adapter;

        @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.ticket_listview);
            setupListViewAdapter();
            setupAddTicketButton();
        }

        public void removeTicketOnClickHandler(View v) 
        {
            Ticket itemToRemove = (Ticket)v.getTag();
            adapter.remove(itemToRemove);
        }

        private void setupListViewAdapter() 
        {
            adapter = new TicketAdapter(AddNewTicket.this, R.layout.ticket_list_item, new ArrayList<Ticket>());
            ListView TicketListView = (ListView)findViewById(R.id.ticketlist);
            TicketListView.setAdapter(adapter);
        }

        private void setupAddTicketButton() {
            findViewById(R.id.free).setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    adapter.insert(new Ticket(""), 0);
                }
            });

            findViewById(R.id.paid).setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    adapter.insert(new Ticket(""), 0);
                }
            });

            findViewById(R.id.donation).setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            adapter.insert(new Ticket(""), 0);
                        }
                });
        }

public void switchContent(android.support.v4.app.Fragment newFragment) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, newFragment).commit();
    }

    }
试试这个

public class TicketAdapter extends ArrayAdapter<Ticket> {

    protected static final String LOG_TAG = TicketAdapter.class.getSimpleName();

    private List<Ticket> items;
    private int layoutResourceId;
    private Context context;



    public TicketAdapter(Context context, int layoutResourceId, List<Ticket> items) {
        super(context, layoutResourceId, items);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.items = items;




    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
     TicketHolder holder = null;

        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new TicketHolder();
        holder.ticket = items.get(position);
        holder.removeTicketButton = (ImageButton)row.findViewById(R.id.ticket_remove);
        holder.removeTicketButton.setTag(holder.ticket);


        holder.settingTicketButton=(ImageButton)row.findViewById(R.id.ticket_setting);
        holder.settingTicketButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Fragment freeFragment = new FreeFragment();
                if (freeFragment != null)
                    switchFragment(freeFragment);
            }
        });



        holder.name = (TextView)row.findViewById(R.id.ticket_name);
        setNameTextChangeListener(holder);

        row.setTag(holder);

        setupItem(holder);
        return row;
    }
 private void switchFragment(Fragment newFragment) {
         if (context == null)
              return;
         if (context instanceof MainActivity) {
              MainActivity feeds = (MainActivity) context;
              feeds.switchContent(newFragment);  
         }
    }

    private void setupItem(TicketHolder holder) {
        holder.name.setText(holder.ticket.getName());

    }

    public static class TicketHolder 
    {
        Ticket ticket;
        TextView name;
        ImageButton settingTicketButton;
        ImageButton removeTicketButton;
    }

    private void setNameTextChangeListener(final TicketHolder holder) {
        holder.name.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                holder.ticket.setName(s.toString());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            @Override
            public void afterTextChanged(Editable s) { }
        });
    }




}  
TicketAdapter.java

    public class TicketAdapter extends ArrayAdapter<Ticket> {

        protected static final String LOG_TAG = TicketAdapter.class.getSimpleName();

        private List<Ticket> items;
        private int layoutResourceId;
        private Context context;

        public TicketAdapter(Context context, int layoutResourceId, List<Ticket> items) {
            super(context, layoutResourceId, items);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
                TicketHolder holder = null;
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new TicketHolder();
            holder.ticket = items.get(position);
            holder.removeTicketButton = (ImageButton)row.findViewById(R.id.ticket_remove);
            holder.removeTicketButton.setTag(holder.ticket);
            holder.settingTicketButton=(ImageButton)row.findViewById(R.id.ticket_setting);
            holder.settingTicketButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                Fragment freeFragment = new FreeFragment();
                if (freeFragment != null)
                    switchFragment(freeFragment);

                Log.e("adapter_click_setting","adapter_click_setting");

                }
            });


            holder.name = (TextView)row.findViewById(R.id.ticket_name);
            setNameTextChangeListener(holder);
            row.setTag(holder);
            setupItem(holder);
            return row;
        }
    private void switchFragment(Fragment newFragment)
    {

        if (context == null)
        {
            Log.e("null_context","nulllll");
             return;
        }
        if (context instanceof AddNewTicket) {
            Log.e("meth_calling","method_calling");
             AddNewTicket feeds = (AddNewTicket) context;
             feeds.switchContent(newFragment);  
        }
   }
    private void setupItem(TicketHolder holder) {
        holder.name.setText(holder.ticket.getName());       
    }

    public static class TicketHolder 
    {
        Ticket ticket;
        TextView name;
        ImageButton settingTicketButton;
        ImageButton removeTicketButton;
    }

    private void setNameTextChangeListener(final TicketHolder holder) {
        holder.name.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                holder.ticket.setName(s.toString());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            @Override
            public void afterTextChanged(Editable s) { }
        });
    }
public class TicketAdapter extends ArrayAdapter<Ticket> {

        protected static final String LOG_TAG = TicketAdapter.class.getSimpleName();

        private List<Ticket> items;
        private int layoutResourceId;
        private Context context;

        public TicketAdapter(Context context, int layoutResourceId, List<Ticket> items) {
            super(context, layoutResourceId, items);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
                TicketHolder holder = null;
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new TicketHolder();
            holder.ticket = items.get(position);
            holder.removeTicketButton = (ImageButton)row.findViewById(R.id.ticket_remove);
            holder.removeTicketButton.setTag(holder.ticket);
            holder.settingTicketButton=(ImageButton)row.findViewById(R.id.ticket_setting);
            holder.settingTicketButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                Fragment freeFragment = new FreeFragment();
                if (freeFragment != null)
                    switchFragment(freeFragment);

                Log.e("adapter_click_setting","adapter_click_setting");

                }
            });


            holder.name = (TextView)row.findViewById(R.id.ticket_name);
            setNameTextChangeListener(holder);
            row.setTag(holder);
            setupItem(holder);
            return row;
        }
    private void switchFragment(Fragment newFragment)
    {

        if (context == null)
        {
            Log.e("null_context","nulllll");
             return;
        }
        if (context instanceof AddNewTicket) {
            Log.e("meth_calling","method_calling");
             AddNewTicket feeds = (AddNewTicket) context;
             feeds.switchContent(newFragment);  
        }
   }
    private void setupItem(TicketHolder holder) {
        holder.name.setText(holder.ticket.getName());       
    }

    public static class TicketHolder 
    {
        Ticket ticket;
        TextView name;
        ImageButton settingTicketButton;
        ImageButton removeTicketButton;
    }

    private void setNameTextChangeListener(final TicketHolder holder) {
        holder.name.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                holder.ticket.setName(s.toString());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            @Override
            public void afterTextChanged(Editable s) { }
        });
    }
AddNewTicket.java

 public class AddNewTicket extends Activity {
    private TicketAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ticket_listview);
        setupListViewAdapter();
        setupAddTicketButton();
    }

    public void removeTicketOnClickHandler(View v) 
    {
        Ticket itemToRemove = (Ticket)v.getTag();
        adapter.remove(itemToRemove);
    }

    private void setupListViewAdapter() 
    {
        adapter = new TicketAdapter(AddNewTicket.this, R.layout.ticket_list_item, new ArrayList<Ticket>());
        ListView TicketListView = (ListView)findViewById(R.id.ticketlist);
        TicketListView.setAdapter(adapter);
    }

    private void setupAddTicketButton() {
        findViewById(R.id.free).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                adapter.insert(new Ticket(""), 0);
            }
        });

        findViewById(R.id.paid).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                adapter.insert(new Ticket(""), 0);
            }
        });

        findViewById(R.id.donation).setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        adapter.insert(new Ticket(""), 0);
                    }
            });
    }

}
     public class AddNewTicket extends FragmentActivity {
        private TicketAdapter adapter;

        @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.ticket_listview);
            setupListViewAdapter();
            setupAddTicketButton();
        }

        public void removeTicketOnClickHandler(View v) 
        {
            Ticket itemToRemove = (Ticket)v.getTag();
            adapter.remove(itemToRemove);
        }

        private void setupListViewAdapter() 
        {
            adapter = new TicketAdapter(AddNewTicket.this, R.layout.ticket_list_item, new ArrayList<Ticket>());
            ListView TicketListView = (ListView)findViewById(R.id.ticketlist);
            TicketListView.setAdapter(adapter);
        }

        private void setupAddTicketButton() {
            findViewById(R.id.free).setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    adapter.insert(new Ticket(""), 0);
                }
            });

            findViewById(R.id.paid).setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    adapter.insert(new Ticket(""), 0);
                }
            });

            findViewById(R.id.donation).setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            adapter.insert(new Ticket(""), 0);
                        }
                });
        }

public void switchContent(android.support.v4.app.Fragment newFragment) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, newFragment).commit();
    }

    }
AddNewTicket的和xml文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <RelativeLayout
        android:id="@+id/main_interface"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

        </FrameLayout>


    </RelativeLayout>


</FrameLayout>

在你的回答中,主要的活动是什么??是否需要在MainActivity中创建switchContent方法??请尽快回复..所以MainActivity是您的主要活动,您可以在其中创建适配器,其他我已经实现了给定的代码。请看一下代码,告诉我是否有任何更正。我已经添加了主活动代码。请查看编辑后的代码。在这段代码中,我创建了switchContent方法。在那种方法下需要写什么??请尽快回复。您尚未在AddNewTicket.java文件中编写以下方法。如果我不写这个方法,那么在AddNewTicket.java文件中写这个方法就会出错。public void switchContentandroid.support.v4.app.Fragment newFragment{//TODO自动生成的方法存根}为什么我需要在AddNewTicket中使用此方法?您是否从我的答案中复制了AddNewTicket的xml文件?抱歉,这是我的错误。是的,您的代码工作正常。非常感谢您的支持。