2016-09-06 15 views
-1

アクティビティコード:itemClickListener。 listViewの項目をクリックする方法は?

package com.example.tayyab.myapplication; 

import android.content.Intent; 
import android.graphics.Typeface; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ImageButton; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MyProfile extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my_profile); 

     populateListView(); 
    } 

    private void populateListView() { 

     String[] myItems = {"Missions","Messages","Camera","Gallery","Temprature","Humidity"}; 
     int[] img = {R.drawable.target,R.drawable.chat,R.drawable.camera,R.drawable.gallery,R.drawable.temp,R.drawable.humidity}; 
     //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item,myItems); 
     //ArrayAdapter<Integer> ad = new ArrayAdapter<Integer>(this,R.layout.list_item,img); 

     final ProfileAdapter adapter = new ProfileAdapter(getApplicationContext(),R.layout.list_item); 
     int i=0; 
     for(String Name : myItems){ 
      Profile obj = new Profile(Name,img[i]); 
      adapter.add(obj); 
      i++; 
     } 

     ListView list = (ListView) findViewById(R.id.listViewMain); 
     list.setAdapter(adapter); 
     list.setClickable(true); 
     ImageButton b3 = (ImageButton)findViewById(R.id.imageButton); 
     b3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent= new Intent(MyProfile.this,MainMission.class); 
       startActivity(intent); 
      } 
     }); 

     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Log.i("Log ","Inside Click Listener"); 
       String myItems = (String) adapterView.getItemAtPosition(i); 
       Toast.makeText(view.getContext(),myItems,Toast.LENGTH_SHORT).show(); 
       if(i==1) { 
        Log.i("Message Event", "Inside Message Activity"); 
        Intent a = new Intent(MyProfile.this, MainMission.class); 
        startActivity(a); 
       } 
      } 
     }); 
    } 
} 

アダプタクラス:

package com.example.tayyab.myapplication; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

public class ProfileAdapter extends ArrayAdapter { 

    private List list = new ArrayList(); 

    public ProfileAdapter(Context context, int resource) { 
     super(context, resource); 
    } 

    public void add(Profile object) { 
     list.add(object); 
     super.add(object); 
    } 

    static class ImageHolder { 
     ImageView img; 
     TextView txt; 
    } 

    @Override 
    public int getCount() { 
     return this.list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return this.list.get(position); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row; 
     row = convertView; 
     ImageHolder holder; 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.list_item, parent, false); 
      holder = new ImageHolder(); 
      holder.img = (ImageView) row.findViewById(R.id.profile_images); 
      holder.txt = (TextView) row.findViewById(R.id.profile_names); 
      row.setTag(holder); 
     } 
     else {   
      holder = (ImageHolder) row.getTag(); 
     } 

     Profile pr = (Profile) getItem(position); 
     holder.img.setImageResource(pr.getImg_names()); 
     holder.txt.setText(pr.getItem_names()); 

     return row; 
    } 
} 
+0

あなたのリストのクリックしたアイテムを正しく取得しますか?行レイアウトにonclicklistenerを設定してから、クリックしたアイテムをアクティビティに渡す必要がある場合は、インターフェイスを使用するか、またはパラメータとしての位置を渡してアクティビティ内のメソッドを呼び出す必要がある場合は、 –

+0

Isあなたがしたいことは明確ではありません。 – MikeKeepsOnShine

答えて

0

おそらくあなたは、リストビューアイテムのクリックをリッスンするリスナーを作りたいです。あなたがしたことは、そうする正しい方法ではありません。

あなたは、あなたがクリックしたどのような項目を教えてくれる基本的なリスナーを持っているあなたのListViewあり

listView.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) 
    { 
     Toast.makeText(getContext(), "Item #" + position, Toast.LENGTH_SHORT).show(); 
    } 
}); 

にonItemClickListenerを追加する必要があります。ロジックは、onItemClickメソッド内で実行できます。あなたのListViewの行のためのカスタムレイアウトを使用している場合

また、あなたは、リスト内の最初の親のレイアウトに

android:descendantFocusability="blocksDescendants" 

を追加する必要があります。

また、ListViewの代わりにRecyclerViewを使用することを検討してください。

関連する問題