【问题标题】:Open SlideUpPanel OnClickListener from a drawer NULL Pointer从抽屉空指针打开 SlideUpPanel OnClickListener
【发布时间】:2015-08-13 08:53:35
【问题描述】:

我是一名初学者,使用来自AndroidSlidingUpPanel Library 的谷歌地图 V2、导航抽屉和 SlideUpPanel 开发地理定位应用程序 在我的 MapsActivity 中,我有一个使用自定义行的公共类“MyAdapter”。 当我想在我的适配器类中使用滑动布局 (mLayout) 以打开上滑面板 onClickListener 时,android studio 无法解析符号“布局”。

如何将此布局调用到我的适配器中? 对不起我的英语不好

class MyAdpater extends BaseAdapter {
private Context context ;
String [] telecentreAurillac;
int[] images = {R.drawable.ic_pointeur,R.drawable.ic_pointeur,R.drawable.ic_pointeur,R.drawable.ic_pointeur,R.drawable.ic_pointeur,
        R.drawable.ic_pointeur,R.drawable.ic_pointeur,R.drawable.ic_pointeur,R.drawable.ic_pointeur,R.drawable.ic_pointeur};


public MyAdpater (Context context) {

    this.context=context;

    telecentreAurillac = context.getResources().getStringArray(R.array.telecentreAurillac);
}

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

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

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

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

    if(convertView == null)
    {
        LayoutInflater inflater =(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.custom_row, parent, false);
    }
    else
    {
        row = convertView;
    }
    // Relier avec custom row
    TextView titleTextView =(TextView) row.findViewById(R.id.TelecentreTexViewDrawer);
    ImageView titleImageView = (ImageView) row.findViewById(R.id.imageDrawer);
    //affichage pour chaque position
    titleTextView.setText(telecentreAurillac[position]);
    titleImageView.setImageResource(images[position]);


    //LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    //View drawer = inflater.inflate(R.layout.activity_maps, null);


    row.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i("MapsActivity", "clickOnTV");



            // drawerLayout.closeDrawers();

            mLayout.setAnchorPoint(1.0f);
            // mLayout.setPanelState(SlidingUpPanelLayout.PanelState.HIDDEN);
            mLayout.setPanelState(SlidingUpPanelLayout.PanelState.ANCHORED);


        }
    });

    return row;

}

}

在我的主要活动中

    mLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout);
    //Log.i("test test", mLayout.toString());
    mLayout.setPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() {
        @Override
        public void onPanelSlide(View panel, float slideOffset) {
            Log.i(TAG, "onPanelSlide, offset " + slideOffset);
        }

        @Override
        public void onPanelExpanded(View panel) {
            Log.i(TAG, "onPanelExpanded");

        }

        @Override
        public void onPanelCollapsed(View panel) {
            Log.i(TAG, "onPanelCollapsed");

        }

        @Override
        public void onPanelAnchored(View panel) {
            Log.i(TAG, "onPanelAnchored");
        }

        @Override
        public void onPanelHidden(View panel) {
            Log.i(TAG, "onPanelHidden");
        }
    });

【问题讨论】:

    标签: android google-maps android-layout android-fragments android-studio


    【解决方案1】:

    简单的方法是将其设为静态并像这样访问它:

     Activity.mlayout..
    

    但正确的方法是通过构造函数参数发送对象引用,例如:

    public MyAdpater (Context context, SlidingUpPanel mlayout) {
    
    this.mlayout = mlayout;
    this.context=context;
    
    telecentreAurillac = context.getResources().getStringArray(R.array.telecentreAurillac);
    

    }

    甚至更好的方法是在 Activity 本身中处理对 listview 项目的点击:

    listView.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
          mLayout.setAnchorPoint(1.0f); 
            // mLayout.setPanelState(SlidingUpPanelLayout.PanelState.HIDDEN); 
            mLayout.setPanelState(SlidingUpPanelLayout.PanelState.ANCHORED); 
      }
    }); 
    

    【讨论】:

    • 我尝试了你的 3 个建议,但我仍然无法正常工作 picture with error message second one the last
    • 执行第三个并使用调试器检查是否一切正常。
    • 当我使用 (Log.i("MapsActivity", "clickOnItem"); ) 进入 OnItemClick 时,我遇到了 setOnItemClickListener 错误(错误:(426, 41) 错误:类型的非法开始)当我单击时,setOnitemClickListener 一无所获
    • listView.setOnItemClickListener(new OnItemClickListener() { listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView> parent, View view, int position, long id) { Log.i("MapsActivity", "clickOnItem"); mLayout.setPanelState(SlidingUpPanelLayout.PanelState.ANCHORED); } });
    • 你有 2 个 setOnItemClickListener(..),并且是嵌套的
    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    相关资源
    最近更新 更多