如何从CustomAdapter调用Activity中的方法



我在feed_item.xml中有一个image,在custom adapter中膨胀。我能够处理图像的点击事件。

我在activity_main中有一个relative layout,当我的Main Activity启动时渲染为player.setVisibility(View.GONE);。我想setVisibility(View.VISIBLE)这个布局当我的图像在行点击。

我有麻烦的两个布局与我的Custom AdapterMain Activity .任何建议将不胜感激!!

FeedListAdapter.java

public class FeedListAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<FeedItem> feedItems;
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();
    public FeedListAdapter(Activity activity, List<FeedItem> feedItems) {
        this.activity = activity;
        this.feedItems = feedItems;
    }
    @Override
    public int getCount() {
        return feedItems.size();
    }
    @Override
    public Object getItem(int location) {
        return feedItems.get(location);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.feed_item, null);

        TextView name = (TextView) convertView.findViewById(R.id.name);
        FeedItem item = feedItems.get(position);
        name.setText(item.getName());
        String fontPath = "fonts/Lato-Light.ttf";
        // Loading Font Face
        Typeface tf = Typeface.createFromAsset(activity.getAssets(), fontPath);
        // Applying font
        name.setTypeface(tf);
        ImageView play=(ImageView)convertView.findViewById(R.id.play);
        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(activity, "Show Layout!",                        Toast.LENGTH_SHORT).show();
            }
        });
        ImageView options=(ImageView)convertView.findViewById(R.id.options_popup);
        options.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showFilterPopup(view);
            }
        });
        return convertView;
    }
    }

MainActivity.java

public class MainActivity extends ActionBarActivity {
RelativeLayout player;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);
        TextView mToolBarTextView = (TextView) findViewById(R.id.text_view_toolbar_title);
        mToolBarTextView.setText("Home");
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        listView = (InnerGridView) findViewById(R.id.list);
        feedItems = new ArrayList<FeedItem>();
        listAdapter = new FeedListAdapter(this, feedItems);
        listView.setAdapter(listAdapter);
        player = (RelativeLayout) findViewById(R.id.player);
        player.setVisibility(View.GONE);
    }
}

您可以使用如下方法创建自己的接口

 public interface OnClickInMyAdapterListener {
    public void onItemclicked();
  }

你的活动应该实现这个接口并覆盖它的方法

public class MainActivity extends ActionBarActivity implements OnClickInMyAdapterListener  {
   ...
   ...
}

@Override
public void onItemclicked() {
  // do what you want
}

更改适配器以接收接口

     private OnClickInMyAdapterListener  myActivityInterface;
     public FeedListAdapter(Activity activity, List<FeedItem> feedItems, OnClickInMyAdapterListener  myActivityInterface ) {
            this.activity = activity;
            this.feedItems = feedItems;
            this.myActivityInterface= myActivityInterface;
        }
活动中的

将接口传递给适配器

listAdapter = new FeedListAdapter(this, feedItems, (OnClickInMyAdapterListener ) this);

并在适配器中使用

this.myActivityInterface.onItemclicked();

…如果您的适配器用于更多不同的活动

,则此解决方案也很有用。

您可以在Activity中编写一个公共方法

并将活动上下文转换为activity

((MainActivity)activity).doSomething();

活动是传递给适配器的上下文

doSomething是活动中的方法

与其在自定义适配器中的视图上设置OnClickListeners,不如调用:

listView.setOnItemSelectedListener(this);

让你的活动实现AdapterView.OnItemSelectedListener

见http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html

最新更新