繁体   English   中英

我如何获得一个将项目添加到arraylist然后添加到另一个片段活动中的listview的按钮

[英]How can i get a button to add an item to an arraylist then to a listview in another fragment activity

我有3个标签的固定标签布局。 我试图在tab1中有一个按钮,以便使用ArrayList将项目添加到tab2中的列表视图中,它们两者都扩展了Fragment 以下代码仅在活动扩展活动时才有效。 谁能帮我解决问题的答案。

我对一个独立的活动进行了一些测试,其中一个按钮添加到了相同活动布局内的listview中,这是可行的

主活动

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扩展了Fragment并出现错误

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;
    }
}

}

我如何才能将此用于片段,以及如何将该操作发送到另一个“片段活动”选项卡并保存到SharedPreferences

我认为这可能与片段中的一般方法有关。 在您的活动中,您正在使用XML指定一种单击按钮即可运行的方法,这很有意义。 在该片段中,您将重写onClick方法,但不以任何方式激活它。 相反,我将再次在片段XML中定义一个按钮,然后在片段中找到findViewById,然后在其中添加on click方法,而不是当前的操作方式。 或者,如果确实希望用户能够在片段中的任何位置单击,则可以只在片段内部的视图中添加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");
   }
 });

您正在混淆“活动”和“片段”的概念。 拥有Fragment并不排除基础Activity的必要性,因为每个Fragment都需要插入一个Activity才能显示,如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;
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM