2017-06-17 18 views
0

私はアンドロイドを初めて使っています。私はナビゲーション・ドロワーを作成し、その中にメニューを作りました。各メニューについて、arrayadapterクラスを使用してカスタムリストビューを作成します。私はそれを実装しましたが、タイトルとアドレスがリストのすべての項目で同じであるという問題があります。リストには最後の項目のみが表示されます。誰でも私を助けてくれますか?私は解決策を理解できません。ここではいくつかのコードや写真は次のとおりです。リストビューは、リストのすべての項目の最後の項目のタイトルとアドレスを表示します

import static com.example.user.appsightseeing.R.layout; 



public class ParksFragment extends Fragment { 
    private ArrayList<Park> parks = new ArrayList<>(); 


    public ParksFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(layout.fragment_parks, container, false); 

     parks.add(new Park("Artificial Lake of Tirana", "The Grand Park of Tirana, also known as the Tirana Park on the Artificial Lake or even the Park of Saint Procopius, is a 230 hectare public park situated on the southern part of Tirana.", 
       "At the end of Rruga Sami Frasheri.", R.drawable.artificiallake)); 
     parks.add(new Park("Zoo park", "The only one of its kind in Albania, Tirana Zoo is concentrated in an area of \u200B\u200B7 hectares in the southern part of town, between the Grand Park and the Botanic Garden of Tirana . The zoo was established in 1966.", 
       "Near Rruga Liqeni i Thate", R.drawable.zoopark)); 
     parks.add(new Park("Memorial park of the Cemetery of the Nation's Martyrs", "The National Martyrs Cemetery of Albania is the largest cemetery in Albania, located on a hill overlooking Tirana. The \"Mother Albania\" statue is located at the Cemetery.", 
       "Near street Rruga Ligor Lubonja", R.drawable.memorialpark)); 
     parks.add(new Park("Kashar park", "The main core of Kashar’s Park, is the Reservoir of Purez- Kus. The reservoir and its surrounding territory are considered as one of the most picturesque and biologically unsoiled suburbs of Tirana.", 
       "Kashar", R.drawable.kasharpark)); 
     parks.add(new Park("Vaqarr park", "The second park in Vaqarr, is a recreational area of 97 ha, that is more than useful to inhabitants in Tirana.", 
       "Vaqarr", R.drawable.vaqarripark)); 
     parks.add(new Park("Farka Lake park", "To the East of the East of Tirana’s city center, Lake Farka is a local favorite for waterborne fun in Summer. Picnicking, jet and water skiing, swimming, boating, all the usual wet sports suspects.", 
       "At Lake of Farka, near Rruga Pjeter Budi", R.drawable.farkapark)); 
     parks.add(new Park("Peza park", "Peza, a village approximately 20 minutes from the center of Tirana, is a popular place for locals to go for a coffee or lunch on the weekends to escape the city.", 
       "Peze", R.drawable.pezapark)); 
     parks.add(new Park("Dajti Recreative park", "This park is one of the components of Dajti National Park, located 26 km east of Tirana and 50 km from \"Mother Teresa\" airport. This place is very frequented by tourists and is also known as the \"Natural Balcon of Tirana\" which offers recreation and accommodation facilities for tourists.", 
       "Dajti mountain", R.drawable.dajtirecreative)); 
     parks.add(new Park("Dajti National park", "Dajti National Park is very important on local, national and regional level, for its biodiversity, landscape, recreational and cultural values. Among others it is considered as a live museum of the natural vertical structure of vegetation.", 
       "Dajti mountain", R.drawable.dajtinational)); 
     parks.add(new Park("Botanic garden", "The Botanical Gardens of Tirana are scenic botanical gardens located in southern Tirana, Albania. It is the only botanical garden in Albania. Construction commenced in 1964, with the original site covering approximately 15 hectares.", 
       "Near Zoo park", R.drawable.botanicpark)); 
     parks.add(new Park("Rinia park", "The park, 500 metres (1,600 ft) from the central square, was built in 1950[5] as part of a major urban development program which developed after World War II. It was initially a pleasant family park where inhabitants of Tirana could take their children.", 
       "Near Bulevardi Deshmoret e Kombit and near Rruga Myslym Shyri", R.drawable.riniapark)); 

     ArrayAdapter<Park> adapter = new parkArrayAdapter(getActivity(), 0, parks); 


     ListView listView = (ListView) rootView.findViewById(R.id.customListView); 
     listView.setAdapter(adapter); 
     return rootView; 

     //add event listener so we can handle clicks 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 

     super.onViewCreated(view, savedInstanceState); 
    } 
} 

arrayadapterクラス:

import java.util.List; 



    public class parkArrayAdapter extends ArrayAdapter<Park> { 

     private Context context; 
     private List<Park> parks; 
     private AnimatedStateListDrawable inflater; 

     //constructor, call on creation 
     public parkArrayAdapter(Context context, int resource, ArrayList<Park> objects) { 
      super(context, resource, objects); 

      this.context = context; 
      this.parks = objects; 
     } 

     //called when rendering the list 
     @NonNull 
     public View getView(int position, View convertView, ViewGroup parent) { 


      //get the park we are displaying 
      Park par = parks.get(position); 
      //get the inflater and inflate the XML layout for each item 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
      View view = inflater.inflate(R.layout.park_layout, null); 

      TextView title = (TextView) view.findViewById(R.id.p_title); 
      TextView description = (TextView) view.findViewById(R.id.p_description); 
      TextView streetname = (TextView) view.findViewById(R.id.address); 
      ImageView image = (ImageView) view.findViewById(R.id.image); 

      //set title and description 
      String titleT = par.getPark_title(); 
      title.setText(titleT); 

      //display trimmed excerpt for description 
      int descriptionLength = par.getPark_description().length(); 
      if(descriptionLength >= 100){ 
       String descriptionTrim = par.getPark_description().substring(0, 100) + "..."; 
       description.setText(descriptionTrim); 
      }else{ 
       description.setText(par.getPark_description()); 
      } 

      streetname.setText(par.getPark_streetname()); 

      //get the image associated with this park 
      int imageID = context.getResources().getIdentifier(String.valueOf(par.getPark_image()), "drawable", context.getPackageName()); 
      image.setImageResource(imageID); 

      return view; 
     } 
    } 

公園クラス:

public class Park { 

    private static String title; 
    private String description; 
    private static String streetname; 
    private int image; 


    public Park(String title, String description, String streetname, int image){ 
     this.title = title; 
     this.description = description; 
     this.streetname = streetname; 
     this.image = image; 

    } 

    public static String getPark_title() { return title; } 

    public String getPark_description() { 
     return description; 
    } 

    public static String getPark_streetname() { 
     return streetname; 
    } 

    public int getPark_image() { 
     return image; 
    } 
} 

行のための公園のレイアウト:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingTop="10dp" 
    android:paddingBottom="10dp"> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_marginRight="10dp" 
     android:contentDescription="Park Image" /> 

    <LinearLayout 
     android:id="@+id/infoSection" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@+id/image" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/p_title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="10dp" 
      android:text="Park Title" 
      android:textColor="@android:color/black" 
      android:textSize="18sp" /> 

     <TextView 
      android:id="@+id/p_description" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="10dp" 
      android:layout_marginRight="5dp" 
      android:text="Park Description" 
      android:textColor="@android:color/black" 
      android:textSize="15sp" /> 

    </LinearLayout> 

    <RelativeLayout 
     android:id="@+id/addressSection" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/infoSection" 
     android:orientation="vertical" 
     android:layout_alignParentBottom="true"> 

     <TextView 
      android:id="@+id/address" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="2dp" 
      android:text="Address:" 
      android:textColor="@android:color/black" /> 

    </RelativeLayout> 

</RelativeLayout> 

screenshot of the listview with same titles and addresses in all items

答えて

0

をparkArrayAdapterありません。クラスをチェックすると、titleとstreetnameフィールドとそのgetterメソッドを静的に記述したことがわかります。この問題は、アダプタから値を取得したときにすべてのタイトルと住所のフィールドで同じになるため、直面しています。どのプラットフォームのどのアプリケーションでも、静的メンバーとインスタンスメンバーの違いを説明するための良い例を作成しました。インスタンスメンバはメモリの異なるアドレスにありますが、静的メンバは同じアドレスにあり、静的メンバに値を割り当てると、静的メンバの値はメモリ上の同じ場所にあるため変更されます。静的な単語を削除すると、リストビューはうまく動作します。

+0

詳細な説明をありがとうございました!今私は注目しなかった違いを認識します。 –

+0

ようこそ。あなたのコメントをお読みください。最高のレッスンは間違いなく行われています。静的インスタンスメンバーの問題を忘れることはありません。 – CanDroid

+0

あなたは私のリストアイテムのためのonItemClickedListenerの実装方法についてのヒントを教えてください。そして、アイテムの詳細を使って、新しいアクティビティまたは新しいフラグメント(わかりません)を開始してください。リストビューをフラグメントに実装することは、アクティビティと同じ実装方法ではないので、私を混乱させます。あなたが助けることができるかどうかわからない..事前に感謝! –

0

あなたは静的変数を使用しているため

private String title; 
private String streetname; 

パーククラスでタイトルとstreetnameから静的削除、Javaのstaticキーワードは、変数や関数は、そのクラスのすべてのインスタンス間で共有されていることを意味実際のオブジェクト自体ではなく、型に属しているからです。

+0

すぐにご利用いただきありがとうございます。私の一日を作った! –

0

フィールドタイトルとクラスのstreetnameパークから静的を削除します。また、クラスは大文字にする必要があります

、そうParkArrayAdapter、これはアンドロイドとは関係ありません

+0

ありがとうございます!実際には、私は彼らが静かに彼らを静かに宣言していますが、いくつかのJavaの提案のために私はそれらを静的に変更しました。混乱してその違いを見ることができませんでした。今私はなぜ私の記述とイメージが正常に動作していたかを理解しています。それはすべて完璧に動作します!ありがとうございました !! –

関連する問題