1

这是我的 ItemAdapter 的代码,我以这种方式将其用作列表的适配器。

list.setAdapter(new ItemAdapter(thisContext,imageUrl));

我正在尝试为将项目添加到 ListFragment 的按钮实现 onclick 侦听器。当我编译时,它说“无法解析符号 getSupportFragmentManager”。请参见下面的粗体字。但我很确定我导入了 android.support.v4.app.FragmentActivity(见下文)。我在主要活动中使用了相同的 getSupportFragmentManager 并且它有效。我不明白为什么它不在这里。如果不是,我应该如何获取 HeadlinesFragment 以便我可以添加到该片段中的列表中?

感谢我能在这里得到的任何帮助。

码头。

package com.suite.android.menu;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
**import android.support.v4.app.FragmentActivity;**


public class ItemAdapter extends BaseAdapter {

private Context itemPageContext;
private String imagesUrl[];
private static final String TAG = "ItemAdapter" ;

public ItemAdapter(Context c, String[] imageUrl)
{
   super();
   itemPageContext = c;
   imagesUrl = imageUrl.clone();  // copy over


}

private LayoutInflater getLayoutInflater()
{
    return (LayoutInflater) itemPageContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public View getView(final int position, View convertView, ViewGroup parent)
{
    // all this is for 1 item in the list

    View theView = convertView;
    final ViewHolder holder;
    if (convertView == null) {
        theView = getLayoutInflater().inflate(R.layout.item_list_image, null);
        holder = new ViewHolder();
        holder.text = (TextView) theView.findViewById(R.id.foodTitle);
        holder.image = (ImageView) theView.findViewById(R.id.foodImage);
        holder.button = (Button) theView.findViewById(R.id.addOrderButton);
        theView.setTag(holder);
    } else
        holder = (ViewHolder) theView.getTag();

    holder.text.setText("Item " + position);
    holder.image.setImageResource(R.drawable.ic_launcher);

    holder.button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            **HeadlinesFragment headFragment = (HeadlinesFragment) getSupportFragmentManager().findFragmentById(R.id.headlines_fragment);**
            headFragment.AddItem("One");
            Log.d(TAG, "Added Item!");
        }
    });

    return theView;
}

private class ViewHolder {
    public TextView text;
    public ImageView image;
    public Button button;
}

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

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

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

}
4

3 回答 3

6

自从我玩碎片以来已经有一段时间了。但我相信您只能从 FragmentActivity 类访问 getSupportedFragmentManager 。

试试这个

public ItemAdapter(Context c,FragmentActivity activity, String[] imageUrl)
{
   super();
   itemPageContext = c;
   this.activity = activity;
   imagesUrl = imageUrl.clone();  // copy over
}

然后在扩展 FragmentActivity 的类中执行以下操作:

list.setAdapter(new ItemAdapter(thisContext,thisActivity, imageUrl));

然后在适配器内执行此操作

activity.getSupportedFragmentManager...

希望这可以帮助

于 2012-08-28T17:44:49.753 回答
4

您可能已经导入了该类,但您不在 a 中FragmentActivity,您在 a 中,BaseAdapter因此您所在的类上不存在该方法。如果您想在 Activity 上调用该方法,则需要传递中的 Activity(作为 aFragmentActivity而不是 a Context)或使此适配器成为私有内部类,以便它可以访问封闭的 Activity 方法。该方法需要在FragmentActivity对象上调用。

于 2012-08-28T17:41:24.127 回答
1

当然,您现在已经找到了答案,但这可能对其他人有所帮助。我的情况可能与您的情况相似,对于如何解决将Adapter类与类分开的问题没有准确的答案FragmentActivity,同时需要访问getSupportFragmentManager适配器中的 ()。

传递上下文不起作用,因为它不允许转换 FragmentActivity (原因我仍然不明白)。

但是我放弃了,只是保存了对经理本身的访问权限并直接调用它:

public ViewPagerAdapter(Context context, FragmentManager fm, Fragment f) {
    super(fm);  
    _fm = fm; // declared in the class "private FragmentManager _fm;"
    _context=context;       
}
于 2012-12-17T17:46:40.303 回答