#java #android #expandablelistadapter
#java #Android #расширяемый список адаптеров
Вопрос:
Я добавил немного текста и несколько кнопок в расширяемый listview и закончил с извлечением данных SQLite в Expandable_listview. Я хочу вызвать другое действие, которое добавляется в расширяемый список.
Вот мой класс Activity
public class My_Project extends ExpandableListActivity
{
ExpandableListView expListView;
Button btnNewProject;
Button btn_myprojectdefinemyteam;
DBHelper databaseHelper;
SQLiteDatabase db;
ImageView imgButtonBack;
List dispDataList;
String[] array;
String[] Task_Title_Size;
String[] Task_Start_Date_Size;
String[] Task_CompletionDate_Size;
String[] Task_CompletionTime_Size;
String[] Task_Description_Size;
String[] Task_Status_Size;
String[] Task_IsActive_Size;
String[] dtrProjectNAmeSize;
public static final String Task_Title = "Task_Titles";
public static final String Task_Start_Date = "start_date";
public static final String Task_CompletionDate = "completion_date";
public static final String Task_CompletionTime = "completion_time";
public static final String Task_Description = "task_description";
public static final String Task_Status = "task_status";
public static final String Task_IsActive ="IS_Active";
private int ChildClickStatus=-1;
ExpandableListAdapter mAdapter;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.my_project);
imgButtonBack = (ImageView)findViewById(R.id.imagBackButton);//ImageView imgButtonBack;
imgButtonBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent iBack = new Intent(My_Project.this , Menu.class);
startActivity(iBack);
finish();
}
});
expListView = (ExpandableListView) findViewById(android.R.id.list);
databaseHelper = new DBHelper(getApplicationContext());
dispDataList=databaseHelper.viewMyProjectDetals();
dtrProjectNAmeSize=new String[dispDataList.size()];
System.out.println(" dtrProjectNAmeSize = " dtrProjectNAmeSize);
if ( dispDataList.size() > 6 )
{
Task_Title_Size=(String[])dispDataList.get(0);
Task_Start_Date_Size=(String[]) dispDataList.get(1);
Task_CompletionDate_Size = (String[])dispDataList.get(2);
Task_CompletionTime_Size=(String[])dispDataList.get(3);
Task_Description_Size=(String[]) dispDataList.get(4);
Task_Status_Size = (String[])dispDataList.get(5);
Task_IsActive_Size = (String[])dispDataList.get(6);
for(int i=0;i<Task_Title_Size.length;i )
{
System.out.println("New data :" Task_Title_Size[i]);
}
List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();
for (int i = 0; i < Task_Title_Size.length ; i )
{
Map<String, String> curGroupMap = new HashMap<String, String>();
groupData.add(curGroupMap);
curGroupMap.put(Task_Title,"" Task_Title_Size[i]);
List<Map<String, String>> children = new ArrayList<Map<String, String>>();
Map<String, String> curChildMap = new HashMap<String, String>();
children.add(curChildMap);
curChildMap.put(Task_Start_Date,"" Task_Start_Date_Size[i]);
curChildMap.put(Task_CompletionDate,"" Task_CompletionDate_Size[i]);
curChildMap.put(Task_CompletionTime,"" Task_CompletionTime_Size[i]);
curChildMap.put(Task_Description,"" Task_Description_Size[i]);
curChildMap.put(Task_Status,"" Task_Status_Size[i]);
curChildMap.put(Task_IsActive,"" Task_IsActive_Size[i]);
childData.add(children);
}
mAdapter =new SimpleExpandableListAdapter(
this,
groupData,
R.layout.list_group,
new String[] { Task_Title },
new int[] {R.id.lblListHeader },
childData,
R.layout.child_item,
new String[] { Task_Start_Date , Task_CompletionDate , Task_CompletionTime , Task_Description , Task_Status , Task_IsActive},
new int[] { R.id.TextView_Projectdetails , R.id.textOne , R.id.textTwo , R.id.textThree , R.id.textFour, R.id.textFive}
);
expListView.setAdapter(mAdapter);
}
expListView.setOnGroupClickListener(new OnGroupClickListener()
{
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id)
{
return false;
}
});
//editTextTaskName = (EditText)findViewById(R.id.Task_Name);
expListView.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(getApplicationContext(),
dtrProjectNAmeSize.length " Expanded",
Toast.LENGTH_SHORT).show();
}
});
expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(getApplicationContext(),
dtrProjectNAmeSize.length " Collapsed",
Toast.LENGTH_SHORT).show();
}
});
expListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
final String selectedExpChild = (String) mAdapter.getChild(
groupPosition, childPosition);
System.out.println(" selectedExpChild = " selectedExpChild);
Toast.makeText(getApplicationContext(), childPosition "Clicked", Toast.LENGTH_LONG).show();
return true;
}
});
btnNewProject = (Button)findViewById(R.id.buttonmyproject_NewProject);
btnNewProject.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(My_Project.this , Add_Project.class);
startActivity(i);
finish();
}
});
btn_myprojectdefinemyteam = (Button)findViewById(R.id.buttonmyprojectdefinemyteam);
btn_myprojectdefinemyteam.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(My_Project.this , Team_Member.class);
startActivity(i);
finish();
}
});
}
private class Myexpandable_ListAdapter extends BaseExpandableListAdapter {
private Context _context;
private List<String > _listDataHeader; // header titles
//List<Map<String, String>> groupData;
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;
Context context;
public Myexpandable_ListAdapter(My_Project my_Project,
List<Map<String, String>> groupData, int listGroup,
String[] strings, int[] is,
List<List<Map<String, String>>> childData, int childItem,
String[] strings2, int[] is2) {
// TODO Auto-generated constructor stub
}
public Object getChild(int groupPosition, int childPosition)
{
//this.get(groupPosition).getChildren().get(childPosition);
String strchildPosition = this._listDataChild.get(this._listDataHeader.get(groupPosition)).get(childPosition);
System.out.println("Child Position =" strchildPosition);
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.get(childPosition);
}
//Call when child row clicked
@Override
public long getChildId(int groupPosition, int childPosition)
{
//****** When Child row clicked then this function call *******//*
//Log.i("Noise", "parent == " groupPosition "= child : ==" childPosition);
if( ChildClickStatus!=childPosition)
{
ChildClickStatus = childPosition;
Toast.makeText(getApplicationContext(), "Parent :" groupPosition " Child :" childPosition ,
Toast.LENGTH_LONG).show();
}
return childPosition;
}
public View getChildView1(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
return parent;
}
@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.child_item, null);
}
TextView txtListChild = (TextView) convertView.findViewById(R.id.TextView_Projectdetails);
TextView txtOneListChild = (TextView)convertView.findViewById(R.id.textOne);
TextView txtTwoListChild = (TextView)convertView.findViewById(R.id.textTwo);
TextView txtThreeListChild = (TextView)convertView.findViewById(R.id.textThree);
TextView txtFourListChild = (TextView)convertView.findViewById(R.id.textFour);
TextView txtFiveListChild = (TextView)convertView.findViewById(R.id.textFive);
txtListChild.setText(childText);
txtOneListChild.setText(childText);
txtTwoListChild.setText(childText);
txtThreeListChild.setText(childText);
txtFourListChild.setText(childText);
txtFiveListChild.setText(childText);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(My_Project.this ,Assign_Task.class);
startActivity(i);
finish();
}
});
Button btnAssgnTask = (Button)convertView.findViewById(R.id.button_EditedTask);
btnAssgnTask.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
Button btnViewTask = (Button)convertView.findViewById(R.id.buttonViewTask);
btnViewTask.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size();
}
@Override
public Object getGroup(int groupPosition) {
return this._listDataHeader.get(groupPosition);
}
@Override
public int getGroupCount() {
return _listDataHeader.size() ;//groupData.size();
}
/**06-21 11:34:03.903: E/AndroidRuntime(544): Caused by: java.lang.NullPointerException
06-21 11:34:03.903: E/AndroidRuntime(544): at com.sentaca.android.accordion.My_Project$Myexpandable_ListAdapter.getGroupCount(My_Project.java:330)
06-21 11:34:03.903: E/AndroidRuntime(544): at android.widget.ExpandableListConnector.getCount(ExpandableListConnector.java:396)
06-21 11:34:03.903: E/AndroidRuntime(544): at android.widget.ListView.setAdapter(ListView.java:454)
06-21 11:34:03.903: E/AndroidRuntime(544): at android.widget.ExpandableListView.setAdapter(ExpandableListView.java:475)
06-21 11:34:03.903: E/AndroidRuntime(544): at com.sentaca.android.accordion.My_Project.onCreate(My_Project.java:146)
**/
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String headerTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_group, null);
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.lblListHeader);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(headerTitle);
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
}
My Error log cat
06-21 12:43:21.564: I/System.out(897): str_Task_Titles :Task One
06-21 12:43:21.564: I/System.out(897): str_start_date :20-06-2014
06-21 12:43:21.564: I/System.out(897): str_completion_date :6-20-2014
06-21 12:43:21.564: I/System.out(897): str_completion_time :17-30
06-21 12:43:21.564: I/System.out(897): str_task_description :Fill The Form
06-21 12:43:21.564: I/System.out(897): str_task_status :Pending
06-21 12:43:21.574: I/System.out(897): str_IS_Active :YES
06-21 12:43:21.596: I/System.out(897): dtrProjectNAmeSize = [Ljava.lang.String;@40526c28
06-21 12:43:21.596: I/System.out(897): New data :Task One
06-21 12:43:27.654: D/AndroidRuntime(897): Shutting down VM
06-21 12:43:27.654: W/dalvikvm(897): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-21 12:43:27.707: E/AndroidRuntime(897): FATAL EXCEPTION: main
06-21 12:43:27.707: E/AndroidRuntime(897): java.lang.ClassCastException: java.util.HashMap
06-21 12:43:27.707: E/AndroidRuntime(897): at com.sentaca.android.accordion.My_Project$5.onChildClick(My_Project.java:192)
06-21 12:43:27.707: E/AndroidRuntime(897): at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:588)
06-21 12:43:27.707: E/AndroidRuntime(897): at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:527)
06-21 12:43:27.707: E/AndroidRuntime(897): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
06-21 12:43:27.707: E/AndroidRuntime(897): at android.os.Handler.handleCallback(Handler.java:587)
06-21 12:43:27.707: E/AndroidRuntime(897): at android.os.Handler.dispatchMessage(Handler.java:92)
06-21 12:43:27.707: E/AndroidRuntime(897): at android.os.Looper.loop(Looper.java:123)
06-21 12:43:27.707: E/AndroidRuntime(897): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-21 12:43:27.707: E/AndroidRuntime(897): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 12:43:27.707: E/AndroidRuntime(897): at java.lang.reflect.Method.invoke(Method.java:507)
06-21 12:43:27.707: E/AndroidRuntime(897): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-21 12:43:27.707: E/AndroidRuntime(897): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-21 12:43:27.707: E/AndroidRuntime(897): at dalvik.system.NativeStart.main(Native Method)
Спасибо.
Комментарии:
1. чего вы достигли с этим?
Ответ №1:
При My_Project.java:141
замене:
String[] array = new String[] { Task_Start_Date , Task_CompletionDate , Task_CompletionTime , Task_Description , Task_Status , Task_IsActive};
с помощью:
String[][] array = new String[][] { Task_Start_Date , Task_CompletionDate , Task_CompletionTime , Task_Description , Task_Status , Task_IsActive};
Удалите предыдущие изменения, которые я предложил (т. Е. Сохраните весь тот же код, что и раньше, только с вышеуказанным изменением).
Комментарии:
1. Я отредактировал вашу строку кода, я получаю ошибку ClassCastException с помощью SimpleExpandableListAdapter, и ошибка указывается в этой строке = new int[] { R.id.TextView_Projectdetails , R.id.textOne , R.id.textTwo , R.id.textThree , R.id.textFour, R.id.textFive}
2. Извините … не могли бы вы, пожалуйста, указать мне код в строке
My_Project.java:141
3. Строка кода в 141 = новая строка[] { Task_Start_Date , Task_CompletionDate , Task_CompletionTime , Task_Description , Task_Status , Task_IsActive},
4. Эй, это было полезно? У вас все еще есть проблема??
5. Я все еще не решаю. Я все еще пытаюсь.