0

ニュースフィードをシミュレートするRecyclerViewがあります。 RecyclerViewの項目をクリックすると、この項目のテキストが別の TextViewに表示されます。ニュースフィード内の投稿のテキストはArrayListに保存されます。私は多くの時間のためにArrayListの値をFragmentTextViewに渡すことを試みましたが、実際には表示されませんでした。ここに私のコードだ:ArrayListのとRecylcerViewArrayListから別のフラグメントに値を渡す方法

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.widget.SwipeRefreshLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ImageButton; 
import android.widget.TextView; 

import java.text.DateFormat; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Date; 

public class Talkscreen extends AppCompatActivity { 

    public static LinearLayoutManager rvLayoutManagerTalkFragment; 
    public static RecyclerView recyclerViewTalkFragment; 
    public static RecyclerView.Adapter rvadapterTalkFragment; 

    public static ArrayList<String> postText; 

    public static String userName = "Benutzer 1"; 
    public static String anzahlKommentare = "1.243"; 
    public static String anzahlLikes = "15540"; 
    public static String currentDateTimeString; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_talkscreen); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(getBaseContext(), PostScreen.class); 
       startActivity(intent); 
      } 
     }); 

     TextView meineaktivitaeten = (TextView) findViewById(R.id.meineAktivitaeten); 
     meineaktivitaeten.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(getBaseContext(), MeineAktivitaeten.class); 
       startActivity(intent); 
      } 
     }); 

     postText = new ArrayList<>(); 
     postText.addAll(Arrays.asList("TEXT 1", 
       "TEXT 2", 
       "TEXT 3", 
       "TEXT 4")); 

     currentDateTimeString = DateFormat.getTimeInstance().format(new Date()); 

     recyclerViewTalkFragment = (RecyclerView) findViewById(R.id.recycleviewTalkFragment); 
     rvLayoutManagerTalkFragment = new LinearLayoutManager(this); 
     recyclerViewTalkFragment.setLayoutManager(rvLayoutManagerTalkFragment); 
     rvadapterTalkFragment = new RvAdapterKlasseTalkFragment(); 
     recyclerViewTalkFragment.setAdapter(rvadapterTalkFragment); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_talkscreen, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.einstellungen) { 
      startActivity(new Intent(this, Einstellungen.class)); 
     } 


     if (id == R.id.information) { 
      startActivity(new Intent(this, Information.class)); 
     } 



     return super.onOptionsItemSelected(item); 
    } 
} 

ArrayListの値が

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class MeinePosts extends Fragment { 


    public static MeinePosts newInstance(){ 
     MeinePosts fragment = new MeinePosts(); 
     return fragment; 
    } 

    public MeinePosts() { 
    } 

    TextView postedText; 



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

     postedText = (TextView) rootView.findViewById(R.id.postTextMeinePosts); 


     return rootView; 

    } 


} 
を示すことになっている断片と

RecyclerViewアダプタ

import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.widget.RecyclerView; 
import android.view.ContextMenu; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageButton; 
import android.widget.TextView; 


public class RvAdapterKlasseTalkFragment extends RecyclerView.Adapter<RvAdapterKlasseTalkFragment.ViewHolderKlasseTalkFragment>{ 


    public static class ViewHolderKlasseTalkFragment extends RecyclerView.ViewHolder{ 

     TextView userName; 
     TextView postText; 
     // IMAGE FÜR DEN POST FEHLT!!!!!!!!! 
     TextView zeit; 
     TextView anzahlKommentare; 
     TextView anzahlLikes; 
     ImageButton moreButton; 

     TextView loeschen; 

     public ViewHolderKlasseTalkFragment (View itemView){ 
      super(itemView); 
      userName = (TextView) itemView.findViewById(R.id.userName); 
      postText = (TextView) itemView.findViewById(R.id.postText); 
      zeit = (TextView) itemView.findViewById(R.id.zeit); 
      anzahlKommentare = (TextView) itemView.findViewById(R.id.anzahlKommentare); 
      anzahlLikes = (TextView) itemView.findViewById(R.id.anzahlLikes); 
      moreButton = (ImageButton) itemView.findViewById(R.id.moreButton); 
      loeschen = (TextView) itemView.findViewById(R.id.loeschen); 
     } 
    } 

    @Override 
    public ViewHolderKlasseTalkFragment onCreateViewHolder(ViewGroup viewGroup, int viewType) { 

     View itemView1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.iten_layout_post, null); 
     return new ViewHolderKlasseTalkFragment(itemView1); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolderKlasseTalkFragment viewHolderKlasse,final int i) { 
     viewHolderKlasse.userName.setText(TalkscreenFragment.userName); 
     viewHolderKlasse.userName.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(v.getContext(), ProfilePopUp.class); 
       v.getContext().startActivity(intent); 
      } 
     }); 
     viewHolderKlasse.postText.setText(TalkscreenFragment.postText.get(i)); 
     viewHolderKlasse.zeit.setText(TalkscreenFragment.currentDateTimeString); 
     viewHolderKlasse.anzahlKommentare.setText(TalkscreenFragment.anzahlKommentare); 
     viewHolderKlasse.anzahlLikes.setText(TalkscreenFragment.anzahlLikes); 
     viewHolderKlasse.moreButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(v.getContext(), ContextMenuPopUp.class); 
       v.getContext().startActivity(intent); 
      } 
     }); 


    } 

    @Override 
    public int getItemCount() { 
     return TalkscreenFragment.postText.size(); 
    } 
} 

活動

ありがとうございました!

答えて

0

フラグメント:アンドロイドでinterfragment通信用

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class MeinePosts extends Fragment { 

    private ArrayList<String> fragmentList; 

    public static MeinePosts newInstance(){ 
     MeinePosts fragment = new MeinePosts(); 
     return fragment; 
    } 

    /*HERE YOU RECIVE PARAMETER ARRAYLIST*/ 
    public MeinePosts(ArrayList<String> myList) { 
     /*Now from here you can set the arraylist 
      to other... it can be access from any method 
      if you set on class*/ 
      fragmentList = myList; 
    } 

    TextView postedText; 



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

     postedText = (TextView) rootView.findViewById(R.id.postTextMeinePosts); 


     return rootView; 

    } 


} 
+0

申し訳ありませんが、私はアンドロイドのプログラミングに比較的新しいです、あなたは私があなたが意味するものの例を教えてくれますか? – Ron

+0

[link](https://www.youtube.com/watch?v=VyyGP_d0Ia8)この例をご覧ください。 –

0

最良の方法は、のman-in-the-middleとしての活性と、両断片のインターフェイスを介してです。 これを行うには、アクティビティに情報を送信できるようにするフラグメントのInterfaceを宣言する必要があります。

まず、あなたのフラグメントRvAdapterKlasseTalkFragmentでこれを行う:{あなたMeineFragmentで

// Declare this interface 
    public Interface AdapterInterface() { 
     public void sendValueToActivity(String value); 
    } 

    // Create an object to reference the activity that implements the previous interface (Talkscreen) 
    AdapterInterface activityConnection; 

    // in your onclick call the interface 
    @Override 
    public void onBindViewHolder(final ViewHolderKlasseTalkFragment viewHolderKlasse,final int i) { 
     viewHolderKlasse.userName.setText(TalkscreenFragment.userName); 
     viewHolderKlasse.userName.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       connectedActivity.sendValueToActivity(myvalue); 
      } 
     }); 

    // here is where you link the interface to the activity and you can openly exchange information now 
    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     try { 
      activityConnection = (AdapterInterface) context; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(context.toString() + " must implement AdapterInterface"); 
     } 
    } 

} 

は、あなたが直接このクラスのフラグメントオブジェクトを参照Activityから呼び出すことができる方法を設定 パブリッククラスRvAdapterKlasseTalkFragmentがRecyclerView.Adapterを拡張します。

public class MeinePosts extends Fragment { 

    // add this method to your MeinePosts fragment 
    public void setTextViewValue(String value) { 
     postedText.setText(value); 
    } 

} 

そして最後に、あなたの活動に最初の断片で宣言されたインタフェースを実装しています

public class Talkscreen extends AppCompatActivity implements MyInterface { 
    @Override 
    public void sendValueToActivity(String value) { 
     // here invoque a method in the second fragment for example 
     AdapterFragment.setTextViewValue(value); 
    } 
} 

2番目のフラグメントから1番目のフラグメントに情報を送信する必要がある場合は、同じ手順を実装する必要があります(2番目のフラグメントのインターフェイスの宣言、アクティビティでのインターフェイスの実装、フラグメントでのリンク、あなたが望むことを行うための最初のフラグメントの新しいメソッドを呼び出す)

さらに詳しい情報が必要な場合は、Githubのこのプロジェクトでフラグメント間通信を行っています。 https://github.com/isaacurbina/FragmentsExercise

私はそれが助けてくれることを願っています!敬具!

0

まず、私が作ったひどい間違いがありました。 MeinePostフラグメントの初期化されたTextViewは、TextViewではなくRelativeLayoutを参照していました。

進行中私は欲しいものを達成するための比較的簡単な方法を見つけました。それはおそらく最良の解決策はありませんが、それは私の作品:

第一ステップ:

RecyclerViewアダプタ

viewHolderKlasse.postText.setText(Talkscreen.postText.get(i)); 
     viewHolderKlasse.postText.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(v.getContext(), AngeklickterPost.class); 
       intent.putExtra("data", Talkscreen.postText.get(i)); //data is a string variable holding some value. 
       v.getContext().startActivity(intent); 
      } 
     }); 

第二ステップ:私は私の意図のために新しいアクティビティを作成するために必要な

AngeklickterPost活動

package com.appmac.ron.gamestalk; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.widget.TextView; 

public class AngeklickterPost extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_angeklickter_post); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     String data = getIntent().getStringExtra("data"); 
     TextView postTextPosted = (TextView) findViewById(R.id.postTextPosted); 
     postTextPosted.setText(data); 
    } 

} 

この投稿は同じ問題を抱えている可能性のある人に役立ちます。私は何か良いことができたら、コメントしてください!

関連する問題