![](/img/trans.png)
[英]Add items to ListView in a fragment in one Activity by clicking a button in another activity
[英]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.