2014-06-20 60 views
2

我有一個自定義列表視圖適配器。我想包括setontemclicklistener禁用列表視圖中的listitem。 我試過使用onitemclicklistener,但它不起作用,你能幫我嗎?如何在ANDROID自定義列表視圖適配器中使用setonitemclicklistener

首頁類:

public class Home extends Activity { 

JSONObject jsonobject; 
JSONArray jsonarray; 
ListView listview; 
ListViewAdapter adapter; 

SharedPreferences pref; 
String uid; 
static String user_id,us; 
ArrayList<HashMap<String, String>> arraylist; 

//static String BET_ID = "bet_id"; 
static String QUESTION = "question"; 
static String QUES_ID = "ques_id"; 



@SuppressLint("NewApi") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    pref = PreferenceManager.getDefaultSharedPreferences(this); 
    setContentView(R.layout.questionlist); 

uid = pref.getString("user_id",null); 
Log.d("uid", ""+uid); 



    new DownloadJSON().execute(); 
} 


private class DownloadJSON extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 


     arraylist = new ArrayList<HashMap<String, String>>(); 

     jsonobject = JSONfunctions 
       .getJSONfromURL("http://192.168.1.23/MutilatedPHP/QuizGame/quesdownloadjson.php"); 

     try { 

      jsonarray = jsonobject.getJSONArray("ques"); 

      for (int i = 0; i < jsonarray.length(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       jsonobject = jsonarray.getJSONObject(i); 


       map.put("question", jsonobject.getString("question")); 
       map.put("ques_id", jsonobject.getString("ques_id"));  



       arraylist.add(map); 
      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void args) { 

     listview = (ListView) findViewById(R.id.listView1); 

     adapter = new ListViewAdapter(Home.this, arraylist); 

     listview.setAdapter(adapter); 


    } 
} 
} 

ListviewAdapter:

public class ListViewAdapter extends BaseAdapter { 

Context context; 
LayoutInflater inflater; 
ArrayList<HashMap<String, String>> data; 



HashMap<String, String> resultp = new HashMap<String, String>(); 

public ListViewAdapter(Context context, 
     ArrayList<HashMap<String, String>> arraylist) { 
    this.context = context; 
    data = arraylist; 

} 

@Override 
public int getCount() { 
    return data.size(); 

} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    TextView qs1; 
    TextView qs2; 


    View v = convertView; 

    if (v == null) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.listitem, null); 
    } 



    resultp = data.get(position); 


    qs2 = (TextView) v.findViewById(R.id.qs); 



    qs2.setText(resultp.get(Home.QUESTION)); 





    v.setOnClickListener(new OnClickListener() { 


     @Override 
     public void onClick(View arg0) { 



      resultp = data.get(position); 


      Intent intent = new Intent(context, SingleItemView.class); 


      intent.putExtra("question", resultp.get(Home.QUESTION)); 
      intent.putExtra("ques_id", resultp.get(Home.QUES_ID)); 



      context.startActivity(intent); 


     } 

    }); 

    return v; 

} 



} 

預先感謝您

+0

你能發表一些代碼嗎?你如何禁用你的物品?你如何設置聽衆? – Marius

+0

將您的代碼與listview xml文件一起發佈。 –

+2

當你點擊listitem時你會發生什麼'v.setOnClickListener'。它不需要'SingleItemView.java'嗎? – Raghunandan

回答

1

試試這個

listView.setOnItemClickListener(); 

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     //Use your code here 
    } 
+1

應該在適配器類中使用嗎? –

+0

沒有使用setAdaptor()的MainActivity.java。 –

1

試試這個!

在你MainActivity形式,其中適配器類被稱爲添加這樣的:

listView1.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      // ListView Clicked item index 
      int itemPosition  = position; 


     } 
    }); 
+0

你的意思是''Home'類中的'protected void onPostExecute(void args)'? –

+1

號,並且這不是compoulsory,您需要在Async任務類中設置Adapter calss。您可以在您的Async任務類的onPostExecute()函數中將列表視圖設置爲可見。並調用listView1.setAdapter(adapter); new Task()。execute(); ()方法 –

+0

酷,但我如何在這裏添加項目位置 –

1

內部在創建時使用這種方法

listview = (ListView) findViewById(R.id.listView1); 

    listview.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, 
       long id) { 
      Object o = listview.getItemAtPosition(position); 

     } 
    }); 
2

你只是簡單的需要調用OnItemClickListener的ListView控件。

listview.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> a, View v, int position, 
      long id) { 


    } 
}); 
相關問題