0

查看关于此的所有帖子,并了解所有情况下人们解释有关从适配器传递数据到带有接口的片段,我使用它但我的问题是如何将数据从片段传递到适配器?以及如何传递这些数据的价值?如何在片段之间传递数据到适配器

这是我的适配器:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { 
    private Context context; 
    List<jsonContent> jcontent; 
    private AdapterCallback callback; 
    private String etpass; 


    public DataAdapter(Context context, List<jsonContent> jcontent, AdapterCallback callback) { 

     this.context=context; 
     this.jcontent=jcontent; 
     this.callback=callback; 

    } 

    @Override 
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 

     View view ; 
     if(i == R.layout.card_row) { 
      view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false); 
     }else { 
      view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.button_card, viewGroup, false); 
     } 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder viewHolder, final int i) { 

     if(i == jcontent.size()) { 

      viewHolder.buttonnext.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        jcontent.removeAll(jcontent); 
        callback.MethodCallbacknext(); 

       } 
      }); 
      viewHolder.buttonprev.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        jcontent.removeAll(jcontent); 
        callback.MethodCallbackprev(); 

       } 
      }); 
      viewHolder.go.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        etpass=String.valueOf(viewHolder.editText.getText()); 
        maghalat f1 = new maghalat(); 
        Bundle args1 = new Bundle(); 
        args1.putString("sag",etpass); 
        f1.setArguments(args1); 
        callback.MethodCallbackgo(); 
       } 
      }); 

      viewHolder.cardView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

       } 
      }); 

      viewHolder.pages.setText(Integer.toString(jcontent.get(i - 1).pages)); 


     } 
     else { 
      viewHolder.title.setText(jcontent.get(i).title); 
      viewHolder.title.setTypeface(viewHolder.title.getTypeface(), Typeface.BOLD); 
      Picasso.with(context).load(jcontent.get(i).imgurl).resize(300, 400).into(viewHolder.imageView); 
     } 
    } 
    @Override 
    public int getItemCount() { 
      return jcontent.size()+1; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return (position == jcontent.size()) ? R.layout.button_card : R.layout.card_row; 
    } 


    public class ViewHolder extends RecyclerView.ViewHolder{ 

     private TextView title,pages,current; 

     private ImageView imageView; 

     private Button buttonnext,buttonprev,go; 

     private CardView cardView; 

     private EditText editText; 



     public ViewHolder(final View view) { 
      super(view); 



      title = (TextView)view.findViewById(R.id.post_title); 
      imageView=(ImageView)view.findViewById(R.id.img); 

      buttonnext =(Button)view.findViewById(R.id.next); 
      buttonprev=(Button)view.findViewById(R.id.prev); 
      go=(Button)view.findViewById(R.id.go); 

      editText=(EditText)view.findViewById(R.id.et_go_page); 

      cardView=(CardView)view.findViewById(R.id.cvv); 

      pages=(TextView)view.findViewById(R.id.number_pages); 
      current=(TextView)view.findViewById(R.id.current); 
} 
} 
} 

这是我的接口:

public interface AdapterCallback { 
    void MethodCallbackgo(); 
    void MethodCallbacknext(); 
    void MethodCallbackprev(); 
} 

,这是我的片段:

public class maghalat extends Fragment { 

    private View myFragmentView; 
    private RecyclerView recyclerView; 
    private DataAdapter adapter; 
    private String TAG = MainActivity.class.getSimpleName(); 
    private ProgressDialog pDialog; 
    List<jsonContent> listcontent=new ArrayList<>(); 

    public int dog=1; 
    public String url = "http://memaraneha.ir/category/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/page/"+String.valueOf(dog)+"/?json=get_posts"; 



    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     myFragmentView = inflater.inflate(R.layout.maghalat, container, false); 


     if(isNetworkConnected()) { 
      asyncRun(); 
     }else 
     { 
      Toast.makeText(getActivity().getApplicationContext(), "دستگاه شما به اینترنت متصل نیست!", Toast.LENGTH_LONG).show(); 
     } 
     return myFragmentView; 
    } 
    public void asyncRun(){ 
     new GetContacts().execute(); 
    } 
    public class GetContacts extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Showing progress dialog 
      pDialog = new ProgressDialog(getActivity()); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 

      HttpHandler sh = new HttpHandler(); 


      // Making a request to url and getting response 
      String jsonStr = sh.makeServiceCall(url); 


      Log.e(TAG, "Response from url: " + jsonStr); 

      if (jsonStr != null) { 
       try { 

        JSONObject jsonObj = new JSONObject(jsonStr); 


        int id=jsonObj.getInt("pages"); 


        JSONArray posts = jsonObj.getJSONArray("posts"); 
        for (int i = 0; i < posts.length(); i++) { 
         JSONObject c = posts.getJSONObject(i); 

         jsonContent jsonContent=new jsonContent(); 

         jsonContent.title=c.getString("title"); 

         //img 
         JSONObject post_img=c.getJSONObject("thumbnail_images"); 
         for (int j=0;j<post_img.length();j++) 
         { 
          JSONObject v=post_img.getJSONObject("mom-portfolio-two"); 
          jsonContent.imgurl=v.getString("url"); 
         } 
         jsonContent.pages=id; 
         listcontent.add(jsonContent); 

        } 

       } catch (final JSONException e) { 
        Log.e(TAG, "Json parsing error: " + e.getMessage()); 
        getActivity().runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getActivity().getApplicationContext(), 
            "Json parsing error: " + e.getMessage(), 
            Toast.LENGTH_LONG) 
            .show(); 
         } 
        }); 
       } 
      } else { 
       Log.e(TAG, "Couldn't get json from server."); 
       getActivity().runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getActivity().getApplicationContext(), 
           "Couldn't get json from server. Check LogCat for possible errors!", 
           Toast.LENGTH_LONG) 
           .show(); 
        } 
       }); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      pDialog.dismiss(); 
      recyclerView=(RecyclerView)myFragmentView.findViewById(R.id.recycler_view); 
      recyclerView.setHasFixedSize(true); 
      RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext()); 
      recyclerView.setLayoutManager(layoutManager); 

      adapter=new DataAdapter(getActivity(), listcontent, new AdapterCallback() { 
       @Override 
       public void MethodCallbackgo() { 
        String gg; 
        Bundle extras = getArguments(); 
        gg = extras.getString("sag"); 
        dog= Integer.parseInt(gg); 
        url = "http://memaraneha.ir/category/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/page/"+String.valueOf(dog)+"/?json=get_posts"; 
        new GetContacts().execute(); 
       } 

       @Override 
       public void MethodCallbacknext() { 
        dog+=1; 
        url = "http://memaraneha.ir/category/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/page/"+String.valueOf(dog)+"/?json=get_posts"; 
        new GetContacts().execute(); 
       } 

       @Override 
       public void MethodCallbackprev() { 
        if (dog!=1) 
        { 
         dog-=1; 
         url = "http://memaraneha.ir/category/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/page/"+String.valueOf(dog)+"/?json=get_posts"; 
         new GetContacts().execute(); 
        }else{ 
         Toast.makeText(getActivity().getApplicationContext(),"این اولین صفحه است",Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 

      recyclerView.setAdapter(adapter); 
     } 
    } 



    private boolean isNetworkConnected() { 
     ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo ni = cm.getActiveNetworkInfo(); 
     if (ni == null) { 
      // There are no active networks. 
      return false; 
     } else 
      return true; 
    } 
    } 

想里面go.setOnClickListener获取编辑文本值适配器并将其传递给public void MethodCallbackgo() {中的片段,但没有奏效。另一个问题是如何将狗片段内的变量值发送到适配器?

+0

不清楚为什么他的适配器有回调。片段应该有下一个和上一个按钮。所有适配器需要做的就是显示数据 –

+0

用于变量狗在片段中的更改值。和你的回答没有回答我的问题 – erfan

+0

这是一条评论。没有答案。鼓励不要在评论 –

回答

1

如果理解正确,您希望将数据从回调方法调用传递到接口实现。

使用参数

void MethodCallbackgo(String data); 

其传回

etpass=String.valueOf(viewHolder.editText.getText()); 
callback.MethodCallbackgo(etpass); 

另外:建议重写的AsyncTask采取URL作为参数。该URL并不需要是你的片段

@Override 
public void MethodCallbackgo(String data) { 
    // here you have data 
    //use it ... 
    new GetContacts().execute(url); // pass url here, for example 
} 

这什么都不做的一个成员变量,但创建一个全新的片段,该片段从不显示

maghalat f1 = new maghalat(); 
Bundle args1 = new Bundle(); 
args1.putString("sag",etpass); 
f1.setArguments(args1); 

就个人而言,我不不过,认为适配器应该控制页码。片段(或其他类)应该包含上一个/下一个/去按钮操作并相应地更新适配器。你已经给一个只负责在一个列表中显示数据的类提供了“太多的责任”。

+0

中给予答案我注意你的建议和感谢。现在我不知道可以将数据从片段传递给适配器吗?! 。只有这样,我知道这个你有任何想法如何管理下一个prev去按钮回收站的结束? – erfan

+0

您无法强制查看RecyclerView的末尾。这就是为什么我说它不应该是适配器的一部分,而是碎片。随意根据你的要求创建另一个帖子,并且不要忘记接受这个用 –

+0

这个复选标记的代码,所以你知道如何发送狗内部片段的值给适配器。问新问题,你回答? – erfan

0

声明此在适配器

private AdapterCallback mAdaptercallback; 

适配器

public void setAdapterCallback(AdapterCallback adaptercallback){ 
    this.mAdaptercallback = adaptercallback; 
} 

创建一个方法,在你的片段做这样

adapter.setAdapterCallback(new DataAdapter.AdapterCallback() { 


      @Override 
      public void MethodCallbackgo() { 
       String gg; 
       Bundle extras = getArguments(); 
       gg = extras.getString("sag"); 
       dog= Integer.parseInt(gg); 
       url = "http://memaraneha.ir/category/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/page/"+String.valueOf(dog)+"/?json=get_posts"; 
       new GetContacts().execute(); 
      } 

      @Override 
      public void MethodCallbacknext() { 
       dog+=1; 
       url = "http://memaraneha.ir/category/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/page/"+String.valueOf(dog)+"/?json=get_posts"; 
       new GetContacts().execute(); 
      } 

      @Override 
      public void MethodCallbackprev() { 
       if (dog!=1) 
       { 
        dog-=1; 
        url = "http://memaraneha.ir/category/%d9%85%d9%82%d8%a7%d9%84%d8%a7%d8%aa/page/"+String.valueOf(dog)+"/?json=get_posts"; 
        new GetContacts().execute(); 
       }else{ 
        Toast.makeText(getActivity().getApplicationContext(),"این اولین صفحه است",Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

我希望这将解决您的问题

+0

'私人AdapterCallback回调;'已经存在。它在构造函数 –

+1

中设置是的,我只是建议只有在创建适配器后才传递set回调。 –

+0

虽然声明为构造函数的一部分没有任何问题。 –

相关问题