简体   繁体   English

performItemClick在Android导航抽屉中的项目不起作用

[英]performItemClick on item in Android Navigation Drawer not working

I have a sliding drawer, and in the drawer is a ListView with 4 items. 我有一个滑动抽屉,抽屉中有一个包含4个项目的ListView。 I would like to use performItemClick to programmatically click one of the items in the drawer, but no matter what I try the code seemingly does nothing. 我想使用performItemClick以编程方式单击抽屉中的项目之一,但是无论我尝试执行什么代码,似乎都无济于事。 When the item is clicked it's supposed to replace the fragment currently in view with another fragment, and change the action bar title. 单击该项目后,应该用另一个片段替换当前正在查看的片段,并更改操作栏标题。 But none of those things happen with I run performItemClick . 但是这些事情都不会在我运行performItemClick发生。

Here is the performItemClick , in a BroadcastReceiver which is receiving a Broadcast 这是正在接收广播的BroadcastReceiverperformItemClick

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
          mDrawerList.performItemClick(mDrawerList.getAdapter().getView(1, null, null),1,mDrawerList.getAdapter().getItemId(1));
          Log.d("receiver", "Got message + item clicked");
      }
};

And here is the code for the actual activity which contains the performItemClick and the drawer itself, along with the drawers fragments (the performItemClick is near the bottom). 这是实际活动的代码,其中包含performItemClick和抽屉本身,以及抽屉片段( performItemClick在底部附近)。

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.MenuItem;

import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.Fragment;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.support.v4.view.GravityCompat;
import android.text.Html;

@SuppressLint("ResourceAsColor")
public class MainActivity extends SherlockFragmentActivity {
    private String Data, Band, Number, Class, Teacher, Title, Date, Type, Description, DescriptionAll, DescriptionCheck;
    // Declare Variables
    DrawerLayout mDrawerLayout;
    LinearLayout mDrawerLinear;
    TextView mWelcomePerson;
    ListView mDrawerList;
    ActionBarDrawerToggle mDrawerToggle;
    MenuListAdapter mMenuAdapter;
    String actionbar_colors, background_colorsString;
    private String Show_View;
    String[] title;
    String[] count;
    int[] icon;
    private String counterss;
    private int counters;
    Fragment fragment1 = new FragmentsView();
    Fragment fragment2 = new FragmentsHomeworkDue();
    Fragment fragment3 = new FragmentSettings();
    private CharSequence mDrawerTitle;
    private CharSequence mTitle;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);




 SharedPreferences sharedprefers = getSharedPreferences("first_run", Context.MODE_PRIVATE );


       if(sharedprefers.contains("first_run")){


       }else{


           SharedPreferences.Editor localEditor = getSharedPreferences("first_run", Context.MODE_PRIVATE ).edit();



            localEditor.putString("first_run", "ran for the first time");


                localEditor.commit();


           Intent intenter = new Intent(this, MainActivity.class);





            finish();




        startActivity(intenter);


       }


        setContentView(R.layout.drawer_main);


        SharedPreferences sharedpre = getSharedPreferences("show_view", Context.MODE_PRIVATE );


        Show_View = sharedpre.getString("show_view", "");




        SharedPreferences sharedpref = getSharedPreferences("actionbar_color", Context.MODE_PRIVATE );





         if(!sharedpref.contains("actionbar_color")){

             getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#03a9f4")));



         }else{

            actionbar_colors = sharedpref.getString("actionbar_color", null);

            getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(actionbar_colors)));

         }


        ActionBar bar = getSupportActionBar();

       bar.setIcon(
               new ColorDrawable(getResources().getColor(android.R.color.transparent))); 








        mTitle = mDrawerTitle = getTitle();


SharedPreferences Today_Homework = getApplicationContext().getSharedPreferences("due_today", Context.MODE_PRIVATE);



        if(Today_Homework.contains("duetoday_content")){



        parse_due_today_string();





        }else{

            counterss = "";

        }


        if(Show_View.equals("Homework Due")){


        title = new String[] { "Homework Due", "Schedule", "Options", "Logout" };


        icon = new int[] { R.drawable.ic_action_duehomework, R.drawable.ic_action_go_to_today, R.drawable.ic_action_settings, R.drawable.ic_action_logout };


        if(counterss == null && counterss.isEmpty()){

            count = new String[] { "", "", "", "" };

             } 
        else{

                 count = new String[] { counterss, "", "", "" };

             }



        }else{

            if(counterss == null && counterss.isEmpty()){

                count = new String[] { "", "", "", "" };

                 }else{

                     count = new String[] { "", counterss, "", "" };

                 }

            title = new String[] { "Schedule", "Homework Due", "Options", "Logout" };

             icon = new int[] { R.drawable.ic_action_go_to_today, R.drawable.ic_action_duehomework, R.drawable.ic_action_settings, R.drawable.ic_action_logout };




        }



        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        mDrawerLinear = (LinearLayout) findViewById(R.id.left_drawer);

        mWelcomePerson = (TextView) findViewById(R.id.Person);

        mWelcomePerson.setText("Lincoln Bernard");

        mDrawerList = (ListView) findViewById(R.id.listview_drawer);


        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                GravityCompat.START);

        mMenuAdapter = new MenuListAdapter(MainActivity.this, title,
                icon, count);


        mDrawerList.setAdapter(mMenuAdapter);


        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());


        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, R.string.drawer_open,
                R.string.drawer_close) {

            public void onDrawerClosed(View view) {
                // TODO Auto-generated method stub
                super.onDrawerClosed(view);
            }

            public void onDrawerOpened(View drawerView) {
                // TODO Auto-generated method stub

                getSupportActionBar().setTitle(mDrawerTitle);
                super.onDrawerOpened(drawerView);
            }
        };




        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            selectItem(0);
        }



        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
              new IntentFilter("up_navigation"));

    }






    public void parse_due_today_string() {

         SharedPreferences Today_Homework = getApplicationContext().getSharedPreferences("due_today", Context.MODE_PRIVATE);

         String Due_Today = Today_Homework.getString("duetoday_content", "");




        ArrayList<String> description = new ArrayList<String>( );

        StringBuilder DescriptionAll = new StringBuilder();

        InputStream is = new ByteArrayInputStream(Due_Today.getBytes());


        BufferedReader reader = new BufferedReader(new InputStreamReader(is));



        try {

            int i = 0;

            while ((Due_Today = reader.readLine()) != null) {   
        String[] part = Due_Today.split("\",\"", -1);
        int noOfItems = part.length;
        int counter=0;


        DescriptionCheck = counter<noOfItems ? part[counter] : "";
        counter++;

        Band = counter<noOfItems ? part[counter] : "";
        counter++;
        Number = counter<noOfItems ? part[counter] : "";
        counter++;
        Class = counter<noOfItems ? part[counter] : "";
        counter++;
        Teacher = counter<noOfItems ? part[counter] : "";
        counter++;
        Title = counter<noOfItems ? part[counter] : "";
        counter++;
        Date = counter<noOfItems ? part[counter] : "";
        counter++;
        Type = counter<noOfItems ? part[counter] : "";
        counter++;
        Data = counter<noOfItems ? part[counter] : "";
        counter++; 



        if (Type != null && !Type.isEmpty()){        

                counters = ++i;

                counterss = Integer.toString(counters);

        Log.i("Counter","Number of children: "+ counters); 



        }

              }


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        finally {


        }


     }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (item.getItemId() == android.R.id.home) {

            if (mDrawerLayout.isDrawerOpen(mDrawerLinear)) {
                mDrawerLayout.closeDrawer(mDrawerLinear);
            } else {
                mDrawerLayout.openDrawer(mDrawerLinear);
            }
        }

        return super.onOptionsItemSelected(item);
    }

    private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            selectItem(position);
        }
    }


    private void selectItem(int position) {

        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();


        if(Show_View.equals("Homework Due")){

        switch (position) {
        case 0:
            ft.replace(R.id.content_frame,fragment2);
            break;
        case 1:
            ft.replace(R.id.content_frame, fragment1);
            break;
        case 2:
            ft.replace(R.id.content_frame, fragment3);
            break;
        }


        }else{


             switch (position) {
             case 0:
                 ft.replace(R.id.content_frame,fragment1);
                 break;
             case 1:
                 ft.replace(R.id.content_frame, fragment2);
                 break;
             case 2:
                 ft.replace(R.id.content_frame, fragment3);
                 break;
             }
        }



        ft.commit();


        mDrawerList.setItemChecked(position, true);
        /
        setTitle(title[position]);

        mDrawerLayout.closeDrawer(mDrawerLinear);
    }




    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getSupportActionBar().setTitle(mTitle);

    }





    @Override
    protected void onPause() {
        super.onPause();


      LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);

    }


    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {




            Log.d("receiver", "Got");


            mDrawerList.performItemClick(mDrawerList.getAdapter().getView(1, null, null),1,mDrawerList.getAdapter().getItemId(1));


          Log.d("receiver", "Got message");




      }
    };


    @Override
    public void onBackPressed() {

        FragmentManager manager = getSupportFragmentManager();
        if (manager.getBackStackEntryCount() > 0) {

            manager.popBackStack();

        } else {

            super.onBackPressed();
        }
    }
}

MenuListAdapter MenuListAdapter

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MenuListAdapter extends BaseAdapter {


    Context context;
    String[] mTitle;
    String[] mCount;
    int[] mIcon;
    LayoutInflater inflater;

    public MenuListAdapter(Context context, String[] title, 
            int[] icon, String[] count) {
        this.context = context;
        this.mTitle = title;
        this.mIcon = icon;
        this.mCount = count;
    }

    @Override
    public int getCount() {
        return mTitle.length;
    }

    @Override
    public Object getItem(int position) {
        return mTitle[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        TextView txtTitle;

        ImageView imgIcon;

        TextView txtCount;

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.drawer_list_item, parent,
                false);


        txtTitle = (TextView) itemView.findViewById(R.id.title);

        txtCount = (TextView) itemView.findViewById(R.id.counter);



        imgIcon = (ImageView) itemView.findViewById(R.id.icon);


        txtTitle.setText(mTitle[position]);

        txtCount.setText(mCount[position]);



        imgIcon.setImageResource(mIcon[position]);

        return itemView;
    }

}

What I have done is something like this inside my Expandable listview adapter for Drawer.. 我在抽屉的Expandable listview适配器中所做的就是这样。

View.setOnClickListener(new OnClickListener() 
            {
                public void onClick(View v) 
                {
                    switch (groupPosition) 
                    {
                    case 0:
                        switch (childPosition) 
                        {
                        case 0:

                            if (groupPosition == 0 && childPosition == 0) 
                            { some code }

Edit: this switch starts different activity (or change view if fragment) on each respective item click.. in your case their will be fragments.. 编辑:此开关在每个相应项目单击上启动不同的活动(如果是片段,则更改视图。)在您的情况下,它们将是片段。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM