Saya mencoba menyusun aplikasi daftar belanja, berdasarkan pada bidang input ArrayList
,, dan ListView
. Aplikasi ini akan didasarkan pada Fragments
. Namun, saya mengalami masalah dan saya tidak tahu bagaimana menyelesaikannya.
Saya melihat-lihat di Google dan StackOverflow dan saya telah menemukan beberapa informasi. Namun, saya belum membuatnya bekerja. Sekarang saya berharap bisa mendapatkan bantuan dengan kode saya.
Saya relatif tidak berpengalaman dalam pengembangan Android.
Main.java
import java.util.ArrayList;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
public class Main extends FragmentActivity {
ArrayList<Detail> items = new ArrayList<Detail>();
FragmentManager FM;
FragmentTransaction FT;
Input input = new Input();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
replaceFragment(R.id.container, input);
}
public void replaceFragment(int container, Fragment fragment){
FM = getFragmentManager();
FT = FM.beginTransaction();
FT.replace(container, fragment);
FT.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
ListAdapter.java
public class ListAdapter extends BaseAdapter {
Context context;
ArrayList<Detail> items;
public ListAdapter(Context context, ArrayList<Detail> items) {
this.context = context;
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return items.indexOf(getItem(position));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
LayoutInflater lInflater = (LayoutInflater)context.getSystemService(
Activity.LAYOUT_INFLATER_SERVICE);
convertView = lInflater.inflate(R.layout.list_row, null);
}
TextView title = (TextView)convertView.findViewById(R.id.itemTitle);
CheckBox done = (CheckBox)convertView.findViewById(R.id.itemDone);
Detail detail_position = items.get(position);
title.setText(detail_position.getTitle());
done.setChecked(detail_position.isDone());
return null;
}
}
List.java
import java.util.ArrayList;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
public class List extends ListFragment implements OnItemClickListener{
ArrayList<Detail> items;
ListAdapter adapter;
private onClickListener OCL;
interface onClickListener{
public void onItemClick(int id);
}
public List(ArrayList<Detail> items) {
this.items = items;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.list_layout, container, false);
return root;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(items != null){
adapter = new ListAdapter(getActivity(), items);
setListAdapter(adapter);
getListView().setOnItemClickListener(this);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if(OCL != null){
OCL.onItemClick(position);
}
}
}
list_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
list_row
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:id="@+id/itemTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.96"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<CheckBox
android:id="@+id/itemDone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Done" />
</LinearLayout>
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
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"
tools:context="com.example.com.hermods.lab2_2.Main" >
</RelativeLayout>
Catatan
02-19 09:10:47.421: E/AndroidRuntime(12745): Process: com.example.com.hermods.lab2_2, PID: 12745
02-19 09:10:47.421: E/AndroidRuntime(12745): java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.AbsListView.obtainView(AbsListView.java:2360)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.ListView.makeAndAddView(ListView.java:1864)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.ListView.fillDown(ListView.java:698)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.ListView.fillFromTop(ListView.java:759)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.ListView.layoutChildren(ListView.java:1673)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.AbsListView.onLayout(AbsListView.java:2148)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.View.layout(View.java:15596)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewGroup.layout(ViewGroup.java:4966)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2072)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1829)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.Choreographer.doCallbacks(Choreographer.java:580)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.Choreographer.doFrame(Choreographer.java:550)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.os.Handler.handleCallback(Handler.java:739)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.os.Handler.dispatchMessage(Handler.java:95)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.os.Looper.loop(Looper.java:135)
02-19 09:10:47.421: E/AndroidRuntime(12745): at android.app.ActivityThread.main(ActivityThread.java:5221)
02-19 09:10:47.421: E/AndroidRuntime(12745): at java.lang.reflect.Method.invoke(Native Method)
02-19 09:10:47.421: E/AndroidRuntime(12745): at java.lang.reflect.Method.invoke(Method.java:372)
02-19 09:10:47.421: E/AndroidRuntime(12745): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
02-19 09:10:47.421: E/AndroidRuntime(12745): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
android
android-layout
android-fragments
android-listview
pengguna2734182
sumber
sumber
return items.indexOf(getItem(position));
sama denganposition
dalam kasus Anda? Hal pertama yang harus dicoba adalah menghapus konstruktor dariList
.Jawaban:
Dalam
public View getView
metode Anda berubahreturn null;
menjadireturn convertView;
.sumber
convertView
itu terjadinull
, apakah itu memiliki makna khusus?View
. Jika Anda kembalinull
, Anda akan mendapatkan pesan kesalahan yang sama persis.#menggunakan
return convertView;
Kode:
sumber
di konstruktor kelas baseadapter Anda mencoba menginisialisasi LayoutInflater , biasanya saya lebih suka cara ini,
di bagian atas kelas buat variabel LayoutInflater , harap ini akan membantu Anda
sumber
itu kadang terjadi ketika kita menggunakan adaptor khusus dalam aktivitas apa pun yang terpisah. dan kami mengembalikan objek nol yaitu tampilan nol sehingga aktivitas menjadi bingung tampilan mana yang akan dimuat, jadi itu sebabnya pengecualian ini terjadi
menunjukkan posisi untuk mengubah tampilan
sumber