我的应用程序有片段活动,它被称为“InvOne.Java”。这个活动有两个公共方法。例如“setTextTo(String text);”和“displayListView()”。我需要从InvoBill.Java活动中调用这些方法。我已经在InvoBill.Java文件中使用了下面的代码。但它对我不起作用。 Logcat显示Error: Attempt to invoke virtual method 'void com.example.dilanka.ypbrothers.InvOne.displayListView()' on a null object reference
错误。
FragmentManager fm = getSupportFragmentManager();
InvOne fragment = (InvOne)fm.findFragmentByTag("fragment_invone");
fragment.setTextTo("Test Method");
fragment.displayListView();
这是两种方法:
public void setTextTo(String text)
{
myTextView.setText(text);
}
public void displayListView(){
try{
cursor = dbHelper.fetchInvoItemById(Invoice._id_in);
columns = new String[] {
DbAdapter.InvoItm_COL_5,
DbAdapter.InvoItm_COL_6,
DbAdapter.InvoItm_COL_7,
DbAdapter.InvoItm_COL_7,
};
to = new int[] {
R.id.InvItm_qty,
R.id.InvItm_rate,
R.id.InvItm_amount,
R.id.InvItm_des,
};
dataAdapter = new SimpleCursorAdapter(
getContext(), R.layout.row_inv_itm,
cursor,
columns,
to,
0);
listView = (ListView)v.findViewById(R.id.lViewFragInvOne);
listView.setAdapter(dataAdapter);
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
return true;
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
}
});
}
catch (Exception e){
Log.v("Error ", e.getMessage());
}
}
这是InvoBill.Java
public class InvoBill extends AppCompatActivity {
private DbAdapter dbHelper;
View item_to_invo;
AlertDialog ad;
String ItmId,_qoh,_sale,_cost;
private SimpleCursorAdapter dataAdapter;
AutoCompleteTextView acTextView;
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private int[] tabIcons = {
R.drawable.customer,
R.drawable.report,
R.drawable.invoice
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_invo_bill);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setTitle("INVOICE#" + Invoice._id_in);
dbHelper = new DbAdapter(this);
dbHelper.open();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
AddItmToInvo();
}
catch (Exception e){
Log.e("Error", e.getMessage());
}
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager_cus);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs_cus);
tabLayout.setupWithViewPager(viewPager);
//setupTabIcons();
}
private void setupTabIcons() {
tabLayout.getTabAt(0).setIcon(tabIcons[0]);
tabLayout.getTabAt(1).setIcon(tabIcons[1]);
tabLayout.getTabAt(2).setIcon(tabIcons[2]);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new InvOne(), "Items");
adapter.addFragment(new InvTwo(), "Sales");
adapter.addFragment(new InvThree(), "Payments");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
public void AddItmToInvo(){
final LayoutInflater inflater = getLayoutInflater();
View myView = inflater.inflate(R.layout.add_itm_to_invo_heder, null);
ImageButton save, close;
save = (ImageButton)myView.findViewById(R.id.btn_itm_invo_save);
close = (ImageButton)myView.findViewById(R.id.btn_itm_invo_close);
AlertDialog.Builder alt = new AlertDialog.Builder(this);
alt.setCustomTitle(myView);
alt.setView(R.layout.item_to_invo);
ad = alt.show();
final int[] to = new int[] { android.R.id.text1 };
final String[] from = new String[] { "_name" };
acTextView = (AutoCompleteTextView)ad.findViewById(R.id.acTextView2);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_dropdown_item_1line,
null,
from,
to);
acTextView.setAdapter(adapter);
acTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Cursor cursor = (Cursor) parent.getItemAtPosition(position);
ItmId = cursor.getString(cursor.getColumnIndexOrThrow("_id"));
_qoh = cursor.getString(cursor.getColumnIndexOrThrow("_qoh"));
_sale = (cursor.getString(cursor.getColumnIndexOrThrow("_sale")));
_cost = (cursor.getString(cursor.getColumnIndexOrThrow("_cost")));
if (!(_qoh.isEmpty())) {
((EditText) ad.findViewById(R.id._qoh_invAdd)).
setText(_qoh);
}
if (!(_sale.isEmpty())) {
((EditText) ad.findViewById(R.id._sale_invAdd)).
setText(_sale);
}
}
});
adapter.setCursorToStringConverter(new SimpleCursorAdapter.CursorToStringConverter() {
@Override
public CharSequence convertToString(Cursor cursor) {
final int columnIndex = cursor.getColumnIndexOrThrow("_name");
final String str = cursor.getString(columnIndex);
return str;
}
});
adapter.setFilterQueryProvider(new FilterQueryProvider() {
@Override
public Cursor runQuery(CharSequence constraint) {
return dbHelper.fetchCountriesByName((constraint != null ? constraint.toString() : null));
}
});
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
EditText qty, rate;
qty = (EditText) ad.findViewById(R.id._qoh_invAdd);
rate = (EditText) ad.findViewById(R.id._sale_invAdd);
dbHelper.AddUpInvItm(Invoice._id_in, ItmId, qty.getText().toString(), rate.getText().
toString(), String.valueOf(Float.valueOf(qty.getText().toString()) *
Float.valueOf(rate.getText().toString())), String.valueOf(Float.
valueOf(qty.getText().toString()) * Float.valueOf(_cost)));
dbHelper.AdjustQoh(ItmId, String.valueOf(Float.valueOf(_qoh)
- Float.valueOf(qty.getText().toString())));
//I need call two method of fragment from here.
try{
FragmentManager fm = getSupportFragmentManager();
InvOne fragment = (InvOne)fm.findFragmentByTag("fragment_invone");
fragment.setTextTo("Test Method");
fragment.displayListView();
}
catch (Exception e){
Log.e("Error ", e.getMessage());
}
ad.dismiss();
} catch (Exception e) {
Log.e("Error", e.getMessage());
}
}
});
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ad.dismiss();
}
});
}
private void goToActivity(Class<InvOne> activityClass,String text)
{
Intent newActivity24=new Intent(this,activityClass);
newActivity24.putExtra("key",text);
startActivity(newActivity24);
}
}
这是InvOne.Java
public class InvOne extends Fragment{
String[] columns;
int[] to;
View v;
Cursor cursor;
ListView listView;
TextView myTextView;
private DbAdapter dbHelper;
private SimpleCursorAdapter dataAdapter;
public InvOne() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbHelper = new DbAdapter(getContext());
dbHelper.open();
}
@Override
public View onCreateView(LayoutInflater inflat, ViewGroup container,
Bundle savedInstanceState) {
v = inflat.inflate(R.layout.fragment_invone, container, false);
myTextView = (TextView)v.findViewById(R.id.InOneFrag_amount);
myTextView.setText("123");
displayListView();
return v;
}
public void setTextTo(String text)
{
myTextView.setText(text);
}
public void displayListView(){
try{
cursor = dbHelper.fetchInvoItemById(Invoice._id_in);
columns = new String[] {
DbAdapter.InvoItm_COL_5,
DbAdapter.InvoItm_COL_6,
DbAdapter.InvoItm_COL_7,
DbAdapter.InvoItm_COL_7,
};
to = new int[] {
R.id.InvItm_qty,
R.id.InvItm_rate,
R.id.InvItm_amount,
R.id.InvItm_des,
};
dataAdapter = new SimpleCursorAdapter(
getContext(), R.layout.row_inv_itm,
cursor,
columns,
to,
0);
listView = (ListView)v.findViewById(R.id.lViewFragInvOne);
listView.setAdapter(dataAdapter);
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
return true;
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
}
});
}
catch (Exception e){
Log.v("Error ", e.getMessage());
}
}
}
答案 0 :(得分:0)
假设我有一个活动Tab1.java,我想从片段ViewFragment.java访问Tab1的sendRequest()方法,我只需创建一个像Tab1 tab1这样的对象;并说tab1.sendRequest();在我的ViewFragment.java的onCreateView()方法中