【发布时间】:2013-12-07 08:42:03
【问题描述】:
我有一个扩展 FragmentActivity 的 MainActivity,它使用导航抽屉调用一些片段,其中一个片段显示了一个由我所做的自定义适配器创建的列表视图,我的问题,我如何通过单击这个的单个文本视图来调用另一个片段传递与该元素相关的 id 或字符串的列表视图?我将接口视为片段之间的通信,但在我的情况下,我无法管理片段内的点击事件,因为我在适配器中进行。抱歉英语不好(英语很差)
片段一
package com.example.ghisa;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import android.R.layout;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.app.ListFragment;
import android.widget.AdapterView.OnItemClickListener;
public class FragmentOne extends Fragment {
public String testo;
public static Fragment newInstance(Context context) {
FragmentOne f = new FragmentOne();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_one, null);
//nei fragment non possiamo fare getApplicationContext() ma getActivity che ritorna
//l'attività associata al frammento l'attività è un context dal momento che activity extends context
Database db=new Database(getActivity());
db.open(); //apriamo il db
List list = new LinkedList();
Cursor c = db.prendiSchede();
/* Check if our result was valid. */
if (c != null) {//Toast.makeText(getActivity(), "asdasd", Toast.LENGTH_SHORT).show();
c.moveToFirst();
int firstNameColumn = c.getColumnIndex("nome");
int id=c.getColumnIndex("id");
if (c.isFirst()) {
int i = 0;
do {
i++;
String firstName = c.getString(firstNameColumn);
int id1=c.getInt(id);
list.add(new Scheda(firstName,id1));
} while (c.moveToNext());
}
}
// Caricamento dati nella listview e nell'adapter tramite results
(getActivity(),R.layout.simple_list_item_1,R.id.ListView2,results);
final ListView listView= (ListView)root.findViewById(R.id.listView);
final AdapterSchede adapter1 = new AdapterSchede(getActivity(), R.layout.simple_list_item_1, list);
listView.setAdapter(adapter1);
final TextView text=(TextView)root.findViewById(R.id.ListView3);
Button button2 = (Button) root.findViewById(R.id.inviascheda);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Database db=new Database(getActivity());
db.open(); //apriamo il db
EditText text = (EditText)getView().findViewById(R.id.creascheda);
String testo=text.getText().toString();
if(testo!=null){
Toast.makeText(getActivity(), "Scheda creata!", Toast.LENGTH_SHORT).show();
db.inserisciScheda(testo);
android.support.v4.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.main, new FragmentOne()); //yesss
ft.commit();
}
}
});
return root;
}
}
我的自定义适配器
package com.example.ghisa;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class AdapterSchede extends ArrayAdapter<Scheda>{
public static List f;
public static int posizioneid;
public AdapterSchede(Context context, int textViewResourceId,
List list ) {
super(context, textViewResourceId, list);
f=list;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.simple_list_item_1, null);
TextView nome = (TextView)convertView.findViewById(R.id.ListView3);
Button b1= (Button)convertView.findViewById(R.id.cancellascheda);
final Scheda s = getItem(position);
//qua mette nella TextView nome il nome preso dall'item s
nome.setText(s.getNome() +" "+ s.getId());
final int idd=s.getId();
nome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// HERE I SHOULD CALL ANOTHER FRAGMENT PASSING THE FIELD nome
}
}
});
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getContext()," "+ idd, Toast.LENGTH_SHORT).show();
Database db=new Database(getContext());
db.open();
db.cancellaScheda(idd);
f.remove(position);
notifyDataSetChanged();
}
});
return convertView;
}
public void setid(int pos){
final Scheda k;
k = getItem(pos);
setposizionelemento(k.getId());
}
void setposizionelemento(int idd){
this.posizioneid= idd;
}
}
谢谢你!!!
【问题讨论】:
标签: android listview android-fragments adapter android-adapter