[英]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 这是正在接收广播的
BroadcastReceiver
的performItemClick
。
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.