私が取り組んでいる Android アプリケーションで、不正な引数の例外があります。
この質問が何度も聞かれるのを見てきました。私自身、さまざまな状況でこの問題に何度か遭遇しました。
基本的に、私がやろうとしているのは、ユーザーがフラグメント(と呼ばれるEditFragment
)内でボタンを押すと、このフラグメント( )につながることOneVarCreatorFrag
です。
これに似た質問で人々が提案したヒントのいくつかを使用してみましたが、私が持っている正確なコンテキストで問題に遭遇した人は誰もいないようです. ここに私のログキャットがあります:
06-01 10:42:02.582: E/AndroidRuntime(625): java.lang.IllegalArgumentException: No view found for id 0x7f030002 for fragment OneVarCreatorFrag{4121c0f8 #1 id=0x7f030002}
ID 0x7f030002 はレイアウトです。これがそのコードです:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/one_var_textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="22dp"
android:text="One Variable list"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/one_var_editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/one_var_button2"
android:layout_centerHorizontal="true"
android:hint="Enter a number"
android:ems="10" />
<EditText
android:id="@+id/one_var_editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/one_var_textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:hint="Name of List"
android:ems="10" />
<Button
android:id="@+id/one_var_button3"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/one_var_editText2"
android:layout_below="@+id/one_var_editText2"
android:text="Create" />
<ListView
android:id="@+id/one_var_listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/one_var_button2" >
</ListView>
<Button
android:id="@+id/one_var_button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/one_var_listView1"
android:layout_toLeftOf="@+id/one_var_button2"
android:text="Add" />
<Button
android:id="@+id/one_var_button2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/one_var_editText1"
android:layout_centerVertical="true"
android:text="Clear" />
</RelativeLayout>
「fragment OneVarCreatorFrag」は Fragment を継承したクラスです(サポート版ではありません)。そのためのコードは次のとおりです。
import java.util.ArrayList;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class OneVarCreatorFrag extends Fragment{
private View view;
private Button add;
private Button create;
private Button clear;
private EditText name;
private EditText getNum;
private ListView listView;
private String temp;
private int index;
private boolean newListCreated;
private ArrayList<Double> numNums;
private ArrayAdapter adapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.one_var_creator, container, false);
add = (Button) view.findViewById(R.id.one_var_button1);
create = (Button) view.findViewById(R.id.one_var_button3);
clear = (Button) view.findViewById(R.id.one_var_button2);
name = (EditText) view.findViewById(R.id.one_var_editText2);
getNum = (EditText) view.findViewById(R.id.one_var_editText1);
numNums = new ArrayList<Double>();
adapter = new ArrayAdapter<Double>(view.getContext(), R.id.one_var_listView1, numNums);
create.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
temp = name.getText().toString();
MainActivity.metaList.add(new StatList(temp));
index = MainActivity.metaList.size()-1;
newListCreated = true;
}
});
add.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(newListCreated)
{
int tempNum = Integer.parseInt(getNum.getText().toString());
MainActivity.metaList.get(index).mainList.add(new Number(tempNum));
listView.toString();
popNumNums();
listView.setAdapter(adapter);
}
}
});
clear.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(newListCreated)
{
MainActivity.metaList.get(index).mainList.clear();
}
}
});
return view;
}
public void popNumNums(){
for(int k = 0; k < MainActivity.metaList.get(index).mainList.size(); k++)
{
numNums.add(MainActivity.metaList.get(index).mainList.get(k).quantity);
}
}
}
EditFragment コードは次のとおりです。
パッケージcom.statbot;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RadioButton;
public class EditFragment extends Fragment{
private Button create;
private RadioButton twoVar;
private RadioButton oneVar;
private ListView numView;
private View view;
public EditFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.edit_layout, container, false);
create = (Button) view.findViewById(R.id.edit_frag_button1);
oneVar = (RadioButton) view.findViewById(R.id.edit_frag_radioButton1);
create.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(oneVar.isChecked())
{
Fragment fragment = new OneVarCreatorFrag();
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.layout.one_var_creator, fragment);
transaction.commit();
}
}
});
return view;
}
}