2016-04-15 9 views
0

私は3つのタブを持つ固定タブレイアウトを持っています。私はArrayListを使用してtab2のリストビューに項目を追加するためにtab1にボタンを入れようとしていますが、両方ともFragmentを拡張しています。以下のコードは、アクティビティがアクティビティを拡張する場合にのみ機能します。誰かが問題の修正に対する答えを教えてくれますか? arraylistにアイテムを追加するボタンを他のフラグメントアクティビティのリストビューに追加するにはどうすればいいですか

私は、これは動作するもの、同じアクティビティのレイアウト内のListViewに追加するボタンを持つ独立した活性を有するいくつかのテストでなかった

MainActivty

public class MainActivity extends Activity { 
private ListView LView; 
ArrayList <String> arrayList = new ArrayList<String>(); 



/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    LView = (ListView) findViewById(R.id.listview); 


} 

public void sendToListView(View view) { 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); //Sets the adapter to hold the List View 
    LView.setAdapter(adapter); //Adds to the List View 
    arrayList.add("Thursday"); 

} 

}

activity_main

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/listview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/button"/> 
<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="add" 
    android:onClick="sendToListView" 
    android:id="@+id/button"/> 
</RelativeLayout> 

このMainActivityはフラグメントを拡張し、私は

public class MainActivity extends Fragment implements View.OnClickListener { 
private ListView LView; 
ArrayList <String> arrayList = new ArrayList<String>(); 
@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_main, 
      container, false); 
    LView = (ListView) view.findViewById(R.id.listview); 
    return view; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()){ 
     case R.id.button: 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); //Here is the error 
      LView.setAdapter(adapter); //Adds to the List View 
      arrayList.add("Thursday"); 
      break; 
    } 
} 

}

どのように私は、フラグメントのために、この作業を取得することができ、そしてどのように私はこの操作が可能HVEができ、同じ動作を実現しようとするとエラーが発生しました他のフラグメントアクティビティタブに送信され、SharedPreferencesに保存されました

答えて

0

あなたのフラグメントの一般的な方法論ともっと関係があると思います。あなたのアクティビティでは、ボタンをクリックして実行するメソッドを指定するためにXMLを使用しています。これは非常に意味があります。フラグメントでは、onClickメソッドをオーバーライドしていますが、何らかの方法でそれをアクティブ化していません。代わりに、フラグメントXMLにボタンを定義し、フラグメント内のfindViewByIdをクリックして、現在行っている方法ではなくクリックメソッドを追加します。あるいは、フラグメント内の任意の場所をクリックできるようにするには、フラグメント内のビューにonclickハンドラを追加するだけです。

Button yourFragmentButton = (Button) findViewById(R.id.yourFragementButtonId); 
yourFragmentButton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); 

     //Sets the adapter to hold the List View 
     LView.setAdapter(adapter); //Adds to the List View 
     arrayList.add("Thursday"); 
    } 
}); 
+0

:あなたがここにフラグメントを使用する必要がある場合

しかし、も、あなたは正しくフラグメントを取り付けたことを考えると、あなたはそれを右のレイアウトを使用していることは、あなたはまだいくつかの変更を行う必要がありあなたと共有する何か、私はyoutube https://www.youtube.com/watch?v=D2mMwWiZBmEのこのビデオのようにListFragmentを拡張することでこれをやってみました。それは新しいプロジェクトでは独立して動作しますが、それは動作しません。私のカスタムPageAdapterは、私がListFragmentで1つのアクティビティを拡張し、他のものをFragmentで拡張するとエラーが表示されます。 ListFragmentですべてを拡張しようとするとクラッシュします。この問題を解決するためのアイデアはありますか? – masterplox

0

アクティビティとフラグメントのコンセプトを混同しています。

A断片は、行動又はユーザの一部を表す:すべてのフラグメントは、それがAndroidDevelopersに記載されているとしての活性に表示するプラグインする必要があるため、フラグメントを有する、基礎となる活動の必要性を排除するものではありませんアクティビティのインタフェース

この詳細については、http://developer.android.com/guide/components/fragments.htmlを参照してください。私が持っている

public class MyFragment extends Fragment implements View.OnClickListener { 
    private ListView LView; 
    ArrayList <String> arrayList = new ArrayList<String>(); 
    @Override 
    public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activity_main, 
      container, false); 
     LView = (ListView) view.findViewById(R.id.listview); 
     Button myButton = view.findViewById(R.id.button); 
     myButton.setOnClickListener(this); 
     return view; 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()){ 
      case R.id.button: 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, arrayList); //Here is the error 
       LView.setAdapter(adapter); //Adds to the List View 
       arrayList.add("Thursday"); 
       break; 
     } 
} 
+0

ArrayAdapter 行にエラーが発生した場合は、赤色の下線が引かれています。「コンストラクタを解決できません」ArrayAdapter(com.ub.rd.listview.MainActivity、int、java.util.ArrayList ) ' " – masterplox

+0

新しいArrayAdapterを変更します(this、android.R.layout.simple_list_item_1、arrayList);新しいArrayAdapter (getContext()、android.R.layout.simple_list_item_1、arrayList)に移動します。 – holandaGo

関連する問題