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

クラスをインポートした可能性がありますがFragmentActivity、あなたは にBaseAdapterいないため、現在のクラスにメソッドが存在しません。アクティビティでそのメソッドを呼び出したい場合は、 Activity を (FragmentActivityではなく aとしてContext) 使用するか、このアダプターをプライベート内部クラスにして、囲んでいる Activity メソッドにアクセスできるようにします。そのメソッドは、オブジェクトで呼び出す必要がありFragmentActivityます。

于 2012-08-28T17:41:24.127 に答える
1

確かにあなたは今までに答えを見つけましたが、これは他の人を助けるかもしれません. 私はおそらくあなたと似たような状況にあり、アダプター内の ()にアクセスする必要があるときに、クラスAdapterとは別のクラスを回避する方法について正確な答えがありませんでした。FragmentActivitygetSupportFragmentManager

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 に答える