2017-02-17 67 views
1

無法在此代碼中從CustomAdapter & setArguments(bundle)調用getSupportFragmentManager()並在另一個片段中使用它。我無法在我的代碼中解決這兩個方法。我如何調用這些方法。請有人試圖幫助我這個樣子如何在ArrayAdapter中調用getSupportFragmentManager()

FragmentManager quote_fm = context.getSupportFragmentManager().beginTransaction(); 

FragmentManager quote_fm = ((MainActivity)context).getSupportFragmentManager().beginTransaction(); 

啓動片段所需的代碼

import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 
import java.util.ArrayList; 

public class CustomGridViewAdapter extends ArrayAdapter<CategoryPost> { 
    private Context context; 
    private int layoutResourceId; 
    private ArrayList<CategoryPost> data = new ArrayList<CategoryPost>(); 
    private Fragment getquoteFrag; 

    public CustomGridViewAdapter(Context context, int resource, ArrayList<CategoryPost> objects) { 
     super(context, resource, objects); 
     this.layoutResourceId = resource; 
     this.context = context; 
     this.data = objects; 
    } 

    static class ViewHolder { 
     TextView success, message, id, name; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null){ 
      holder = new ViewHolder(); 
      convertView = LayoutInflater.from(context).inflate(layoutResourceId, parent, false); 
      holder.id = (TextView)convertView.findViewById(R.id.tv_data_id); 
      holder.name = (TextView)convertView.findViewById(R.id.tv_name_id); 
      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     final CategoryPost post = data.get(position); 
     holder.name.setText(post.getName()); 
     holder.name.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Bundle bundle = new Bundle(); 
       getquoteFrag = new GetQuoteFragment(); 
       FragmentManager quote_fm = getSupportFragmentManager().beginTransaction();; 
       FragmentTransaction quote_ft = quote_fm.beginTransaction(); 
       bundle.putString("pos", String.valueOf(post.getId())); 
       quote_fm.setArguments(bundle); 
      } 
     }); 
     return convertView; 
    } 
} 
+0

'getSupportFragmentManager'是FragmentActivity'的'一員......所以很明顯,如果你瓦納調用它,你需要參考 – Selvin

+0

該類@Selvin實例 我仍然無法解決它。 –

+0

爲什麼你需要它在適配器? – Avi

回答

4

試試下面的代碼:

import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 
import java.util.ArrayList; 
public class CustomGridViewAdapter extends ArrayAdapter<CategoryPost> { 
    private Context context; 
    private int layoutResourceId; 
    private ArrayList<CategoryPost> data = new ArrayList<CategoryPost>(); 
    private Fragment getquoteFrag; 
    public CustomGridViewAdapter(Context context, int resource, ArrayList<CategoryPost> objects) { 
     super(context, resource, objects); 
     this.layoutResourceId = resource; 
     this.context = context; 
     this.data = objects; 
    } 
    static class ViewHolder 
    { 
     TextView success, message, id, name; 
    } 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null){ 
      holder = new ViewHolder(); 
      convertView = LayoutInflater.from(context).inflate(layoutResourceId, parent, false); 
      holder.id = (TextView)convertView.findViewById(R.id.tv_data_id); 
      holder.name = (TextView)convertView.findViewById(R.id.tv_name_id); 
      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     final CategoryPost post = data.get(position); 
     holder.name.setText(post.getName()); 
     holder.name.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Bundle bundle = new Bundle(); 
       getquoteFrag = new GetQuoteFragment(); 
       FragmentManager quote_fm = ((MainActivity)context).getSupportFragmentManager().beginTransaction();; 
       FragmentTransaction quote_ft = quote_fm.beginTransaction(); 
       bundle.putString("pos", String.valueOf(post.getId())); 
       getquoteFrag.setArguments(bundle); 
       quote_ft.replace(R.id.container,getquoteFrag) 
       quote_ft.commit(); 

      } 
     }); 
     return convertView; 
    } 
} 
+1

不相容的類型 'FragmentManager quote_fm =((MainActivity)上下文).getSupportFragmentManager()。();' 無法解析'quote_fm.setArguments(bundle);' –

+0

我已更新我的代碼@Mukesh Prajapati –

+1

@MukeshPrajapati您需要使用片段對象getquoteFrag.setArguments(bundle); –

0

呼叫東西​​是

  Bundle bundle = new Bundle(); 
      getquoteFrag = new GetQuoteFragment(); 
      FragmentManager quote_fm = ((MainActivity)context).getSupportFragmentManager().beginTransaction();; 
      FragmentTransaction quote_ft = quote_fm.beginTransaction(); 
      bundle.putString("pos", String.valueOf(post.getId())); // you can also send this value as an integer type 
      getquoteFrag.setArguments(bundle); 
      quote_ft.replace(R.id.your_main_activity_container, getquoteFrag) 
      quote_ft.commit(); 

下面問quetion到在另一個片段中獲取值同時調用它。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     String post_id= getArguments().getString("pos"); 

     // you can also pass values in int type. 
     int pos = getArguments().getInt("pos"); 
    } 
} 
+0

我無法得到它。 實際上,我想將'post.getId()'值存儲在'bundle'對象中,並在'GetQuoteFragment'片段中獲取該值。 –

+0

這是不同的問題? –

+0

不,但我仍然無法解決它後添加'FragmentManager quote_fm =((GetQuoteFragment)上下文).getSupportFragmentManager()。beginTransaction();'線。 然後我想在這個方法'quote_ft.setArguments(bundle);'中取得包值。 –

相關問題