Open Multiple Listview Item Click to One Class

前端 未结 2 1140
终归单人心
终归单人心 2020-12-07 04:42

Hope you guys can help.

I have a activity which handles all the 10 image button clicks and list view intents. What i am looking to do is have 1 layout for all the li

相关标签:
2条回答
  • If I understand what you want, you could create a class with something like a static Arraylist to be appended each time an item is clicked. So create a class something like

    public class Data class
    {
        static ArrayList<String> dataArray = new ArrayList<String>();;
    
        public Data()
        {
            // empty constructor but could be used if needed
        }
    

    Then you can add different getters/setters or whatever you need here. When you click on an item you just call something like

    Data.dataArray.add("stuff");
    

    then retrieve items in here in your next Activity.

    If that is too complicated or more than you need then you can just pass an ArrayList or whatever object you need through the Intent

    Intents

    Also, just a preference but since all of your Buttons do the same thing, you can do away with initializing them and setting listeners on all of them. In xml just add

    `android:onClick="someFunctionName"`
    

    to each Button then use that function name

    public void someFunctionName(View v) {
    switch(v.getId()) {
    // if one of the image buttons is pressed...
    
        Intent intent = new Intent(this, Listviewact.class);
        // pass ID of pressed button to listview-activity
        intent.putExtra("buttonId", v.getId());  
        startActivity(intent);
        break;
    // here you could place handling of other clicks if necessary...        
    }
    

    There is also no need for the case statements since they all do the same thing and you don't need implements OnClickListener in the Activity declaration

    0 讨论(0)
  • 2020-12-07 05:47

    You're using the ListView but not using any of it's callbacks? Here, this is my code that I use for my ListView. I'm putting activities in my array, but you could put anything. Modifying the R.layout.mfd_view allows you to put whatever you want for each list item. A Button if that's what you need. Hope this helps. I'm still learning myself.

    import android.app.Activity;
    import android.app.ListFragment;
    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    
    public class MyListFragment extends ListFragment {
    String fragmentBackStack;
    MyMapHandler handler;
    OnViewSelectedListener mListener;
    
    /**
     * An array of POJOs used to hold the info about the fragments we'll be
     * swapping between This should be inserted into an array adapter of some
     * sort before being passed onto ListAdapter
     */
    private static final ViewDetails[] ACTIVITY_DETAILS = {
            new ViewDetails(R.string.action_largeTach,
                    R.string.largeTach_description, LargeTachActivity.class),
            new ViewDetails(R.string.action_map, R.string.map_description,
                    MyMapHandler.class),
            new ViewDetails(R.string.action_navigation,
                    R.string.navigation_description, NavigationActivity.class),
            new ViewDetails(R.string.action_raceMode,
                    R.string.raceMode_description, RaceModeActivity.class),
            new ViewDetails(R.string.action_settings,
                    R.string.settings_description, SettingsFragment.class),
            new ViewDetails(R.string.action_extraInfo,
                    R.string.extraInfo_description, ExtraInfoActivity.class) };
    
    /**
     * @author PyleC1
     * 
     *         A POJO that holds a class object and it's resource info
     */
    public static class ViewDetails {
        private final Class<? extends Activity> viewActivity;
        private int titleId;
        private int descriptionId;
    
        /**
         * @param titleId
         *            The resource ID of the string for the title
         * @param descriptionId
         *            The resource ID of the string for the description
         * @param activityClass
         *            The fragment's class associated with this list position
         */
        ViewDetails(int titleId, int descriptionId,
                Class<? extends Activity> viewActivity) {
    
            super();
            this.titleId = titleId;
            this.descriptionId = descriptionId;
            this.viewActivity = viewActivity;
        }
    
        public Class<? extends Activity> getViewActivity() {
            return viewActivity;
        }
    }
    
    /**
     * @author PyleC1
     * 
     *         Extends the ArrayAdapter class to support our custom array that
     *         we'll insert into the ListAdapter so the user can pick between
     *         MFD screens at boot time.
     */
    private static class CustomArrayAdapter extends ArrayAdapter<ViewDetails> {
        public CustomArrayAdapter(Context context, ViewDetails[] activities) {
            super(context, R.layout.mfd_view, R.id.mfdTitle, activities);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            MFDView mfdView;
    
            if (convertView instanceof MFDView) {
                mfdView = (MFDView) convertView;
            } else {
                mfdView = new MFDView(getContext());
            }
    
            ViewDetails details = getItem(position);
    
            mfdView.setTitleId(details.titleId);
            mfdView.setDescriptionId(details.descriptionId);
    
            return mfdView;
        }
    }
    
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    
        ListAdapter listAdapter = new CustomArrayAdapter(getActivity(),
                ACTIVITY_DETAILS);
        setListAdapter(listAdapter);
    
        try {
            mListener = (OnViewSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnViewSelectedListener!");
        }
    }
    
    @Override
    public void onResume() {
        super.onResume();
    }
    
    public interface OnViewSelectedListener {
        public void onViewSelected(Class<? extends Activity> activityClass);
    }
    
    public void onListItemClick(ListView l, View v, int position, long id) {
        ViewDetails details = (ViewDetails) getListAdapter().getItem(position);
    
        mListener.onViewSelected(details.viewActivity);
    }
    }
    

    Note that whatever activity calls this fragment must implement the OnViewSelectedListener interface. If you added this to your main activity as a subclass, this wouldn't be required. The public void onListItemClick(arg0, arg1, arg2, arg3) callback is fine. You just swap fragments or call activities from inside there.

    0 讨论(0)
提交回复
热议问题